今天是实习的第一天。在熟悉周围环境以后,在IDE上自己练习JUnit单元测试。
JUnit4的一些区别
首先是测试函数命名没有上一代的限制,不需要用“xxxTest”来表示测试代码,而是采用@Test表明测试部分。
@Before和@After表示了setup和teardown的方法。
引用:
@BeforeClass
全局只会执行一次,而且是第一个运行@Before
在测试方法运行之前运行@Test
测试方法@After
在测试方法运行之后允许@AfterClass
全局只会执行一次,而且是最后一个运行@Ignore
忽略此方法- 执行次序是
@BeforeClass
->@Before
->@Test
->@After
->@Before
->@Test
->@After
->@AfterClass
。@Ignore
会被忽略。
其次,终于不需要像JUnit3一样extend Testcase了。
参数化:
在昨天的基础上,碰到了一点问题:
我可以添加一个@Test来执行一个测试(用例),如果我需要测试很多个用例呢?难道需要建立很多个@Test方法么?
Well,这个时候就用到了@Parameter的标签了。
基本使用方法
@RunWith
当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器。
要进行参数化测试,需要在类上面指定如下的运行器:
@RunWith (Parameterized.class)
然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
通过@Runwith 参数化的使用,我们可以不和@Test说话并丢出了一大堆参数让它一个一个测试并且报告结果
如同测试类构造函数定义,三个参数分别为输入1,输入2和预期结果。
Collection类型对应的这三个参数向@Test传递四组参数。
使用@Ignore标签让测试类不去测试旧的代码部分。因为这里要用新的方法测试。
由于不像上图那种方法,没有对两个输入和一个期待值进行直接定义,代码仅剩assertEquals()一行。
(instance被放在了私有成员中,并在@Before标签中初始化)
很好,JUnit自动输入了我们放进去的这几组数据,并显示结果。
这样就不需要手动去改数据而是可以一次性完成对某个函数的多个参数测试了。