perl

推荐列表 站点导航

当前位置:首页 > 脚本编程 > perl >

Perl 脚本中单元测试自动化浅析(一)

来源:未知  作者:we  发布时间:2020-12-25 13:40
Perl 单元测试框架的概述 随着敏捷开发模式的流行,如何快速高效地适应不确定或经常性变化的需求显得越来越重要。要做到这一点,需要在开发过程的各个阶段引入足够的测试。而其中单元测...
Perl 单元测试框架的概述
随着敏捷开发模式的流行,如何快速高效地适应不确定或经常性变化的需求显得越来越重要。要做到这一点,需要在开发过程的各个阶段引入足够的测试。而其中单元测试则是保证代码质量的第一个重要关卡。
 
针对各种不同的语言,都有特有的单元测试框架。比如针对 Java 程序的单元测试框架 JUnit,针对 Python 程序的单元测试框架 PyUnit,针对 XML 程序的单元测试框架 XMLUnit 等。
 
目前,比较通用的 Perl 单元测试框架模块主要有 Test::Class 和 Test::Unit。
 
Test::Unit 类似于 JUnit 框架,虽然它提供了通过子类的方式扩展测试类,但由于不基于 Test::Builder,无法用到 Test::Builder 系列测试模块的强大作用。Test::Class 同样支持通过创建子类、孙子类等重用测试类以及管理测试,同时,Test::Class 是基于 Test::Builder 模块创建的,因此可以使用任何 Test::Builder 系列的测试模块,如 Test::More、Test::Exception、Test::Differences、Test::Deep 等。这是 Test::Class 相对于 Test::Unit 的一大优势。
 
本文将结合具体实例,介绍如何创建基于 Test::Simple、Test::More 和 Test::Class 的 Perl 单元测试框架。
 
模块的安装
由于 ::Simple、Test::More 和 Test::Class 都不是标准模块,因此需要安装。可以用 CPAN 方式在 root 权限下安装。命令如下:
 
1
Perl – MCPAN – e ‘ install Test::Class ’
其他模块的安装方法类似。使用 CPAN 需要连接到网络,如果当前没有网络环境,可以根据事先下载好的模块的 readme 文件中的步骤安装相应模块。
 
Perl 单元测试框架
本节中,我们假设有一个模块 Hello.pm 需要测试,我们结合不同的 Perl 测试框架,讨论测试代码的写法,并从测试结果介绍他们的特点和作用。
 
Hello.pm 的源代码如下:
 
清单 1. 被测对象 Hello.pm 源代码
 
use strict; 
use warnings; 
package Hello; 
 
$Hello::VERSION = '0.1'; 
 
sub hello { 
my ($you)=@_; 
return "Hello, $you!"; 
 
sub bye { 
my ($you)=@_; 
return "Goodbye, $you!"; 
1;
Test::Simple
我们先来介绍最简单、最基础的模块 Test::Simple。之所以说这个模块是最简单最基础的,是因为这个模块只有一个 function ok()。语法如下:
 
Syntax: ok(Arg1, Arg2)
 
Arg1: 布尔表达式,如果这个表达式为真, 这个 testcase passed,否则 failed;
 
Arg2: 这个参数是可选的,用来设置 testcase name。
 
因此,我们能很轻松地书写基于 Test::Simple 测试框架的测试代码。示例代码 test_simple.perl 如下:
 
清单 2. Test::Simple 示例代码
 
use strict; 
use warnings; 
 
use Test::Simple tests => 3; 
use Hello; # What you're testing. 
 
my $hellostr=Hello::hello('guys'); 
my $byestr=Hello::bye('guys'); 
ok($hellostr eq 'Hello, guys!', 'hello() works'); 
ok($byestr eq 'Goodbye, guys!', 'bye() works'); 
my $helloworld=Hello::hello(); 
ok($hellostr eq 'Hello, world!', 'should be hello, world! by default');
需要特别说明的是,在写测试脚本之前,必须事先声明计划执行的 testcase 的个数,如:
 
1
use Test::Simple tests => 3;
我们在命令行中执行 perl test_simple.perl,观察程序的输出如下:
 
清单 3. Test::Simple 示例代码执行结果
 
C:\MySpace\workdir>perl test_simple.perl 
1..3 
ok 1 - hello() works 
ok 2 - bye() works 
Use of uninitialized value $you in concatenation (.) or string at Hello.pm line 
9. 
not ok 3 - should be hello, world! by default 
# Failed test 'should be hello, world! by default'
# at hello.t line 12. 
# Looks like you failed 1 test of 3.
从测试结果中不难看出,第一个和第二个 testcase 成功通过测试,而第三个 testcase 则失败了。
 
Test::More 的介绍
从字面意思上不难看出 Test::More 比 Test::Simple 提供了更多更广泛的对 testcase 是否成功的支持。下面简单介绍其中的一些常用功能。
 
和 Test::Simple 一样,Test::More 同样需要事先申明需要测试的 testcase 的个数。比如:
 
1
use Test::More tests => 10;
然而,
Perl 脚本中单元测试自动化浅析(二)

相关热词:

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/jiaob/perl/8924.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

Perl 脚本中单元测试自动化浅析(一)

2020-12-25 编辑:we

Perl 单元测试框架的概述
随着敏捷开发模式的流行,如何快速高效地适应不确定或经常性变化的需求显得越来越重要。要做到这一点,需要在开发过程的各个阶段引入足够的测试。而其中单元测试则是保证代码质量的第一个重要关卡。
 
针对各种不同的语言,都有特有的单元测试框架。比如针对 Java 程序的单元测试框架 JUnit,针对 Python 程序的单元测试框架 PyUnit,针对 XML 程序的单元测试框架 XMLUnit 等。
 
目前,比较通用的 Perl 单元测试框架模块主要有 Test::Class 和 Test::Unit。
 
Test::Unit 类似于 JUnit 框架,虽然它提供了通过子类的方式扩展测试类,但由于不基于 Test::Builder,无法用到 Test::Builder 系列测试模块的强大作用。Test::Class 同样支持通过创建子类、孙子类等重用测试类以及管理测试,同时,Test::Class 是基于 Test::Builder 模块创建的,因此可以使用任何 Test::Builder 系列的测试模块,如 Test::More、Test::Exception、Test::Differences、Test::Deep 等。这是 Test::Class 相对于 Test::Unit 的一大优势。
 
本文将结合具体实例,介绍如何创建基于 Test::Simple、Test::More 和 Test::Class 的 Perl 单元测试框架。
 
模块的安装
由于 ::Simple、Test::More 和 Test::Class 都不是标准模块,因此需要安装。可以用 CPAN 方式在 root 权限下安装。命令如下:
 
1
Perl – MCPAN – e ‘ install Test::Class ’
其他模块的安装方法类似。使用 CPAN 需要连接到网络,如果当前没有网络环境,可以根据事先下载好的模块的 readme 文件中的步骤安装相应模块。
 
Perl 单元测试框架
本节中,我们假设有一个模块 Hello.pm 需要测试,我们结合不同的 Perl 测试框架,讨论测试代码的写法,并从测试结果介绍他们的特点和作用。
 
Hello.pm 的源代码如下:
 
清单 1. 被测对象 Hello.pm 源代码
 
use strict; 
use warnings; 
package Hello; 
 
$Hello::VERSION = '0.1'; 
 
sub hello { 
my ($you)=@_; 
return "Hello, $you!"; 
 
sub bye { 
my ($you)=@_; 
return "Goodbye, $you!"; 
1;
Test::Simple
我们先来介绍最简单、最基础的模块 Test::Simple。之所以说这个模块是最简单最基础的,是因为这个模块只有一个 function ok()。语法如下:
 
Syntax: ok(Arg1, Arg2)
 
Arg1: 布尔表达式,如果这个表达式为真, 这个 testcase passed,否则 failed;
 
Arg2: 这个参数是可选的,用来设置 testcase name。
 
因此,我们能很轻松地书写基于 Test::Simple 测试框架的测试代码。示例代码 test_simple.perl 如下:
 
清单 2. Test::Simple 示例代码
 
use strict; 
use warnings; 
 
use Test::Simple tests => 3; 
use Hello; # What you're testing. 
 
my $hellostr=Hello::hello('guys'); 
my $byestr=Hello::bye('guys'); 
ok($hellostr eq 'Hello, guys!', 'hello() works'); 
ok($byestr eq 'Goodbye, guys!', 'bye() works'); 
my $helloworld=Hello::hello(); 
ok($hellostr eq 'Hello, world!', 'should be hello, world! by default');
需要特别说明的是,在写测试脚本之前,必须事先声明计划执行的 testcase 的个数,如:
 
1
use Test::Simple tests => 3;
我们在命令行中执行 perl test_simple.perl,观察程序的输出如下:
 
清单 3. Test::Simple 示例代码执行结果
 
C:\MySpace\workdir>perl test_simple.perl 
1..3 
ok 1 - hello() works 
ok 2 - bye() works 
Use of uninitialized value $you in concatenation (.) or string at Hello.pm line 
9. 
not ok 3 - should be hello, world! by default 
# Failed test 'should be hello, world! by default'
# at hello.t line 12. 
# Looks like you failed 1 test of 3.
从测试结果中不难看出,第一个和第二个 testcase 成功通过测试,而第三个 testcase 则失败了。
 
Test::More 的介绍
从字面意思上不难看出 Test::More 比 Test::Simple 提供了更多更广泛的对 testcase 是否成功的支持。下面简单介绍其中的一些常用功能。
 
和 Test::Simple 一样,Test::More 同样需要事先申明需要测试的 testcase 的个数。比如:
 
1
use Test::More tests => 10;
然而,
Perl 脚本中单元测试自动化浅析(二)

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/jiaob/perl/8924.shtml

相关文章

风云图片

推荐阅读

返回perl频道首页