ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:441.53KB ,
资源ID:29182606      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29182606.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最新软件测试实验单元测试工具JUNIT.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最新软件测试实验单元测试工具JUNIT.docx

1、最新软件测试实验单元测试工具JUNIT武 汉 轻 工 大 学软件测试实验报告实验一 单元测试工具JUNIT姓 名: 李娅娅 学 号: 1505110015 班 级: 软工1503 指导老师: 丁月华 1. 实验目的了解自动化测试工具JUnit的架构、功能,学习如何下载、安装JUnit,掌握使用JUnit对Java程序进行单元测试的方法。2. 实验步骤2.1 导入jar包 右击项目名,单击Build Path中的Add Libraries. 选择User Libariry。 新建一个存放Junit的包的库 将junit-4.7.jar导入 Jar包导入完成。2.2 编写第一个Junit测试类2.

2、2.1 Calculator类 编写被测试类Calculator:(拷贝) private static int result; / 静态变量,用于存储运行结果 public void add(int n) result = result + n; public void substract(int n) result = result - 1; /Bug: 正确的应该是 result =result-n public void multiply(int n) / 此方法尚未写好 public void divide(int n) result = result / n; public voi

3、d square(int n) result = n * n; public void squareRoot(int n) for (; ;) ; /Bug : 死循环 public void clear() / 将结果清零 result = 0; public int getResult() return result; 2.2.2 CalculatorTest类 编写CalculatorTest类,用于测试Calculator类:(拷贝)public class CalculatorTest private static Calculator calculator = new Calcul

4、ator(); Before public void setUp() throws Exception calculator.clear(); Test public void testAdd() calculator.add(2); calculator.add(3); assertEquals(5, calculator.getResult(); Test public void testSubstract() calculator.add(10); calculator.substract(2); assertEquals(8, calculator.getResult(); Ignor

5、e(Multiply() Not yet implemented) Test public void testMultiply() Test public void testDivide() calculator.add(8); calculator.divide(2); assertEquals(4, calculator.getResult(); 2.2.3 运行测试 在类名上右击,选择Run As Junit Test 得到Junit面板,并显示了哪些测试是成功的,哪些是失败的以及哪些是未执行(直接跳过了):2.3 使用JUnit对Money类进行单元测试2.3.1 Money类(拷贝)

6、public class Money private int fAmount; /货币余额 private String fCurrency; /货币类型 public Money(int amount, String currency) fAmount=amount; fCurrency=currency; public int amount() return fAmount; public String currency() return fCurrency; public Money add(Money m) /add方法把两个Money对象相加,合成一个Money对象 return n

7、ew Money(amount()+m.amount(),currency(); public boolean equals(Object anObject) /equals方法判断两个Money对象是否相等 if(anObject instanceof Money) Money aMoney=(Money)anObject; return aMoney.currency().equals(currency()&amount()=aMoney.amount(); return false; 现在要对Money类的add方法进行测试,步骤如下:2.3.2 MoneyTest类(1) 创建对象定义

8、几个Money类的对象 Money result; Money m12CHF=new Money(12,CHF); Money m14CHF=new Money(14,CHF); Money expected=new Money(26,CHF); /预期的运行结果(2) addTest() 在MoneyTest类中编写testAdd方法,对Money类中的add()方法进行测试: Test public void testAdd() result=m12CHF.add(m14CHF); assertTrue(expected.equals(result);/判断运行结果是否与预期值相同 (3)

9、 testEquals() Test public void testEquals() assertTrue(!m12CHF.equals(null); assertTrue(!m12CHF.equals(m14CHF); assertEquals(m12CHF,m12CHF); assertEquals(m12CHF,new Money(12,CHF); 2.3.3 运行测试 测试通过2.4 Fixture和几个标签Fixture的含义就是“在某些阶段必然被调用的代码”。比如我们上面的测试,由于只声明了一个Calculator对象,他的初始值是0,但是测试完加法操作后,他的值就不是0了;接下

10、来测试减法操作,就必然要考虑上次加法操作的结果。这绝对是一个很糟糕的设计!我们非常希望每一个测试都是独立的,相互之间没有任何耦合度。因此,我们就很有必要在执行每一个测试之前,对Calculator对象进行一个“复原”操作,以消除其他测试造成的影响。因此,“在任何一个测试执行之前必须执行的代码”就是一个Fixture,我们用Before来标注它,如前面例子中的setUp()方法所示:这里不在需要Test标注,因为这不是一个test,而是一个Fixture。同理,如果“在任何测试执行之后需要进行的收尾工作”也是一个Fixture,使用After来标注。2.4.1 代码测试public class

11、TTest BeforeClass public static void beforeClass() System.out.println(beforeClass); AfterClass public static void afterClass() System.out.println(afterClass); Before public void before() System.out.println(before); Test public void testAdd() int z = new T().add(5, 3); assertThat(z, is(8); assertThat

12、(z, allOf(greaterThan(5), lessThan(10); Test(expected = java.lang.ArithmeticException.class, timeout = 100) public void tDivide() int z = new T().divide(8, 0); After public void after() System.out.println(after); 2.4.2 运行结果 在控制台中得到运行结果: 在Junit选型卡中得到:(1) 结果分析 在Junit选项卡中由于代码找不到T类,而使方法运行错误。 在控制台中输出两次be

13、fore和两次after,是因为在类中test了两个方法,每运行一个方法,before和after下的方法就是默认执行。2.4.3 标签学习(1) Test测试方法(2) Before使用了该元数据的方法在每个测试方法执行之前都要执行一次,一般做初始化方法。 (3) After使用了该元数据的方法在每个测试方法执行之后要执行一次,一般用于释放资源。(4) ignore该元数据标记的测试方法在测试中会被忽略。你可以为该标签传递一个String的参数,来表明为什么会忽略这个测试方法。比如:lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。 (5) Be

14、foreClass所有测试开始之前运行,一个测试类只能有一个,并且必须声明为public static。该方法在内存中只存在一份实例,比较适合加载配置文件。(6) AfterClass:所有测试结束之后运行,一个测试类只能有一个,并且必须声明为public static。通常用来对资源进行清理,比如关闭数据库的连接。(备注:为什么需要BeforeClass 和 AfterClass ,我们来看看他们是否适合完成如下功能:有一个类是负责对大文件(超过 500 兆)进行读写,他的每一个方法都是对文件进行操作。换句话说,在调用每一个方法之前,我们都要打开一个大文件并读入文件内容,这绝对是一个非常耗费

15、时间的操作。如果我们使用 Before 和 After ,那么每次测试都要读取一次文件,效率及其低下。这里我们所希望的是在所有测试一开始读一次文件,所有测试结束之后释放文件,而不是每次测试都读文件。 JUnit 的作者显然也考虑到了这个问题,它给出了 BeforeClass 和 AfterClass 两个 Fixture 来帮我们实现这个功能。从名字上就可以看出,用这两个 Fixture 标注的函数,只在测试用例初始化时执行 BeforeClass 方法,当所有测试执行完毕之后,执行 AfterClass 进行收尾工作。)JUnit4的单元测试用例执行顺序为: BeforeClass - Be

16、fore - Test - After - AfterClass。每一个测试方法的调用顺序为: Before - Test - After。可以根据以上给定的标记来构造测试类中的测试方法,一般说来遵守以下约定:类放在test包中类名用XXXTest结尾方法用testMethod命名2.5 限时测试Test(timeout=value) ,例如Test(timeout=1000)2.5.1 被测源代码2.5.2 测试代码 Test(timeout = 1000) public void testSquareRoot() calculator.squareRoot(4); assertEquals

17、(2, calculator.getResult(); 2.5.3 运行测试 在测试代码中Timeout 参数表明了设定的时间,单位为毫秒,因此 1000 就代表 1 秒,测试的方法超过了设定的时间表示失败。2.6 异常测试对除法运算中的“除0异常”进行测试2.7 综合练习2.7.1 测试代码public class CalculatorTest private static Calculator calculator = new Calculator(); BeforeClass public static void beforeClass() System.out.println(befo

18、reClass); AfterClass public static void afterClass() System.out.println(afterClass); Before public void before() System.out.println(before); After public void after() System.out.println(after); Before public void setUp() throws Exception calculator.clear(); Test public void testAdd() calculator.add(

19、2); calculator.add(3); assertEquals(5, calculator.getResult(); Test public void testSubstract() calculator.add(10); calculator.substract(2); assertEquals(8, calculator.getResult(); Ignore(Multiply() Not yet implemented) Test public void testMultiply() Test public void testDivide() calculator.add(8);

20、 calculator.divide(2); assertEquals(4, calculator.getResult(); Test(timeout = 1000) public void testSquareRoot() calculator.squareRoot(4); assertEquals(2, calculator.getResult(); Test(expected = ArithmeticException. class ) public void divideByZero() calculator.divide( 0 ); 2.7.2 运行测试(1) 控制台 分析:在代码中

21、定义了BeforeClass和AfterClass标签,因此,在输出的首尾有这标签下定义的输出信息。代码中编写了6个测试方法,因此对Before,After标签下的输出信息打印了5遍(其中方法testMultiply使用了Ignore标签)。(2) Junit选项卡 测试结果为三个通过,一个忽略,一个失败,一个错误。2.8 运行器RunWith当把测试代码提交给JUnit框架后,框架就会通过Runner来运行代码。在JUnit中有很多个Runner,他们负责调用测试代码,每一个Runner都有各自的特殊功能,你要根据需要选择不同的Runner来运行你的测试代码。JUnit中有一个默认Runne

22、r,如果你没有指定,那么系统自动使用默认Runner来运行你的代码。 也就是说,下面两段代码含义是完全一样的:public class CalculatorTest. /该方式就是使用了默认的Runner等价于RunWith(JUnit4ClassRunner.class)public class CalculatorTest. /声明了Runner从上述例子可以看出,要想指定一个Runner,需要使用RunWith标注,并且把你所指定的Runner作为参数传递给它。另外一个要注意的是,RunWith是用来修饰类的,而不是用来修饰函数的。只要对一个类指定了Runner,那么这个类中的所有函数都

23、被这个Runner来调用。是对其他Runner的学习:2.8.1 参数化测试RunWith(Parameterized. class )把一组组的测试数据集中放在一个集合中,这个集合作为测试类的参数,进行集中测试,避免为每一组测试数据写一个测试方法。你可能遇到过这样的函数,它的参数有许多特殊值,或者说他的参数分为很多个区域。比如,一个对考试分数进行评价的函数,返回值分别为“优秀,良好,一般,及格,不及格”,因此你在编写测试的时候,至少要写 5 个测试,把这 5 中情况都包含了,这确实是一件很麻烦的事情。我们还使用我们先前的例子,测试一下“计算一个数的平方”这个函数,暂且分三类:正数、 0 、负

24、数。(1) 测试代码 按照之前的方法,要测试三类就需要编写三个测试方法:public class AdvancedTest private static Calculator calculator = new Calculator(); Before public void clearCalculator() calculator.clear(); Test public void square1() calculator.square( 2 ); assertEquals( 4 , calculator.getResult(); Test public void square2() calc

25、ulator.square( 0 ); assertEquals( 0 , calculator.getResult(); Test public void square3() calculator.square( - 3 ); assertEquals( 9 , calculator.getResult(); 运行结果:为了简化类似的测试, JUnit4 提出了“参数化测试”的概念,只写一个测试函数,把这若干种情况作为参数传递进去,一次性的完成测试。代码如下:RunWith(Parameterized. class )/更改默认的测试运行器为Parameterized.classpublic

26、 class SquareTest private static Calculator calculator = new Calculator(); private int param; /声明变量存放输入参数(用来计算实际结果) private int result; /声明变量存放预期值 /声明一个返回值为Collection的公共静态方法,并用Parameters修饰 Parameters public static Collection data() return Arrays.asList( new Object 2,4 , 0,0 , -3 ,9 ); /为测试类声明一个带有参数的

27、公共构造方法,并为声明变量赋值 public SquareTest( int param, int result) this .param = param; this .result = result; Test public void square() calculator.square(param); assertEquals(result, calculator.getResult(); 5、就业机会和问题分析 分析:首先,要为这种测试专门生成一个新的类,而不能与其他测试共用同一个类,此例中我们定义了一个SquareTest类。然后,你要为这个类指定一个Runner,而不能使用默认的Ru

28、nner了,因为特殊的功能要用特殊的Runner。RunWith(Parameterized.class)这条语句就是为这个类指定了一个ParameterizedRunner。动漫书籍 化妆品 其他第二步,定义一个待测试的类,并且定义两个变量,一个用于存放参数,一个用于存放期待的结果。接下来,定义测试数据的集合,也就是上述的data()方法,该方法可以任意命名,但是必须使用Parameters标注进行修饰。 之后是构造函数,其功能就是对先前定义的两个参数进行初始化。(2) 测试结果朋友推荐 宣传广告 逛街时发现的 上网2.8.2 测试套件RunWith(Suite.class) 通过前面的案例

29、学习到,在一个项目中,只写一个测试类是不可能的,我们会写出很多很多个测试类。可是这些测试类必须一个一个的执行,也是比较麻烦的事情。鉴于此,JUnit为我们提供了打包测试的功能,将所有需要运行的测试类集中起来,一次性的运行完毕,大大的方便了我们的测试工作。具体测试套件代码如下:(1) 测试代码RunWith(Suite.class)Suite.SuiteClasses(CalculatorTest.class, SquareTest.class)/测试套件的入口类,该类不包含任何方法,/更改测试运行器Suite.class,将测试类作为数组传入到Suite.SuiteClasses();public class SuiteTest 5、你认为一件DIY手工艺制品在什么价位可以接受?(5) 资金问题 这个测试代码表示将CalculatorTest.class和SquareTest.class同时进行测试。运行测试,可以看到两个测试类的测试结果:(2

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1