(四)JUnit测试套件使用及参数化设置

(四)JUnit测试套件使用及参数化设置

        这篇笔记记录JUnit测试套件的使用,即批量运行测试类;以及JUnit中的参数化设置。
        @RunWith
  当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器。

1.JUnit测试套件

        如果在测试类不端增加的情况下,如何运行所有的单元测试代码类?一个个测试类的执行吗?显然繁琐且费劲。
        将要运行的测试类集成在我们的测试套件中,比如一个系统功能对应一个测试套件,一个测试套件中包含多个测试类,每次测试系统功能时,只要执行一次测试套件就可以了。
1.1 测试类及测试套件代码
        新建3个测试任务类:
[java]  view plain  copy
  1. package jtzen9.util;  
  2. import org.junit.Test;  
  3. public class TaskTest1 {  
  4.   
  5.     @Test  
  6.     public void test() {  
  7.         System.out.println("this is TaskTest1...");  
  8.     }  
  9.   
  10. }  
  11.   
  12.   
  13. package jtzen9.util;  
  14. import org.junit.Test;  
  15. public class TaskTest2 {  
  16.   
  17.     @Test  
  18.     public void test() {  
  19.         System.out.println("this is TaskTest2...");  
  20.     }  
  21.   
  22. }  
  23.   
  24.   
  25. package jtzen9.util;  
  26. import org.junit.Test;  
  27. public class TaskTest3 {  
  28.   
  29.     @Test  
  30.     public void test() {  
  31.         System.out.println("this is TaskTest3...");  
  32.     }  
  33. }  
        新建一个套件类,包含以上三个任务类:
[java]  view plain  copy
  1. package jtzen9.util;  
  2.   
  3. import org.junit.runner.RunWith;  
  4. import org.junit.runners.Suite;  
  5.   
  6. @RunWith(Suite.class)  
  7. @Suite.SuiteClasses({TaskTest1.class,TaskTest2.class,TaskTest3.class})  
  8. public class SuiteTest {  
  9.     /* 
  10.      * 1.测试套件就是组织测试类一起运行的 
  11.      *  
  12.      * 写一个作为测试套件的入口类,这个类里不包含其他的方法 
  13.      * 更改测试运行器Suite.class 
  14.      * 将要测试的类作为数组传入到Suite.SuiteClasses({}) 
  15.      */  
  16. }  
运行结果:

1.2 说明
        ①使用@RunWith注解,修改测试运行器。例如@RunWith(Suite.class),这个类就成为测试套件的入口类。
        ②@Suite.SuiteClasses()中放入测试套件的测试类,以数组的形式{class1,class2,......}作为参数

2.JUnit参数化设置

        如果测试代码大同小异,代码结构都是相同的,不同的只是测试的数据和预期值,那么有没有更好的办法将相同的代码结构提取出来,提高代码的重用度呢?
        解决:进行参数化测试。
        步骤:
  ①要进行参数化测试,需要在类上面指定如下的运行器:@RunWith (Parameterized.class)
  ②然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
  ③在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
2.1 代码:
[java]  view plain  copy
  1. package jtzen9.util;  
  2.   
  3. import static org.junit.Assert.*;  
  4.   
  5. import java.util.Arrays;  
  6. import java.util.Collection;  
  7.   
  8. import org.junit.Test;  
  9. import org.junit.runner.RunWith;  
  10. import org.junit.runners.Parameterized;  
  11. import org.junit.runners.Parameterized.Parameters;  
  12.   
  13. @RunWith(Parameterized.class)   //1.更改默认的测试运行器为RunWith(Parameterized.class)  
  14. public class ParameterTest {  
  15.       
  16.     //2.声明变量存放预期值和测试数据  
  17.     int expected =0;  
  18.     int input1 = 0;  
  19.     int input2 = 0;  
  20.       
  21.     //3.声明一个返回值 为Collection的公共静态方法,并使用@Parameters进行修饰  
  22.     @Parameters  
  23.     public static Collection<Object[]><object> data() {  
  24.         return Arrays.asList(new Object[][]{  
  25.                 {3,1,2},  
  26.                 {4,2,2}  
  27.         }) ;  
  28.     }  
  29.       
  30.     //4.为测试类声明一个带有参数的公共构造函数,并在其中为之声明变量赋值  
  31.     public ParameterTest(int expected,int input1,int input2) {  
  32.         this.expected = expected;  
  33.         this.input1 = input1;  
  34.         this.input2 = input2;  
  35.     }  
  36.       
  37.     //5.运行测试方法,即可完成对多组数据的测试  
  38.     @Test  
  39.     public void testAdd() {  
  40.         assertEquals(expected, new Calculate().add(input1, input2));  
  41.     }  
  42.   
  43. }</object>  
2.2 运行结果



看了慕课网的JUnit视频教程: http://www.imooc.com/learn/356,总结笔记。

结束语:

        以前测试自己写的代码都是新建一个main方法,然后sysout输出控制台观察结果,繁琐又麻烦!学习了JUnit测试之后,感觉方便了很多,当然JUnit还有很多方法需要在使用的过程中不断的总结。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JUnit是一个用于编写和运行测试用例的Java测试框架。它提供了一组注解和断言方法,使得编写和执行单元测试变得更加简单和方便。 JUnit测试用例通常包含以下几个部分: 1. 测试类:一个普通的Java类,用于编写测试方法。 2. 测试方法:使用@Test注解标记的方法,用于测试被测代码的某个功能或行为。 3. 断言方法:用于验证测试结果是否符合预期的方法。 在编写JUnit测试用例时,可以使用以下几个常用的注解: 1. @Test:标记一个方法为测试方法。 2. @Before:在每个测试方法执行之前执行,用于初始化测试环境。 3. @After:在每个测试方法执行之后执行,用于清理测试环境。 4. @BeforeClass:在所有测试方法执行之前执行,用于初始化一次性的资源。 5. @AfterClass:在所有测试方法执行之后执行,用于清理一次性的资源。 在测试方法中,可以使用断言方法来验证测试结果是否符合预期。JUnit提供了一系列的断言方法,例如: 1. assertEquals(expected, actual):验证两个值是否相等。 2. assertTrue(condition):验证条件是否为真。 3. assertFalse(condition):验证条件是否为假。 4. assertNull(object):验证对象是否为空。 5. assertNotNull(object):验证对象是否不为空。 除了上述基本的使用方式外,JUnit还支持参数化测试、异常测试测试套件等高级功能,可以根据具体的需求选择使用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值