发表于: 2018-04-03 23:54:22
1 714
今天完成的事情:
任务1.18
学习Junit,并尝试写自己的第一个单元测试,记着要写在自己的src/main/test下。
在项目上右键>build path>configure bulid path>libraries>add library>junit,加入junit4需要的jar包。
定义一个待测试的类,类中有待测试的四则运算四个方法:
在类文件上右键>New>Junit Test Case,新建一个测试类:
完善测试类,因为勾选了上面四个选项,所以自动创建了相应的四个方法:
Junit4注解:@Test,@Before,@BeforeClass,@After,@AfterClass,@Ignore
@Test:测试一个方法,该方法没有参数和返回值。
@Before:在每次测试方法前执行一次。
@BeforeClass:在类中所有测试方法执行前执行一次。
@Ignore:忽略此方法的测试。
此测试类勾选生成的前四个方法分别测试了@BeforeClass,@AfterClass,@Before,@After的功能,testAdd()方法测试了待测试类里的add()方法,另外三个方法分别进行了超时测试、异常测试、@Ignore忽略测试等。
执行结果如下:
需要说明的是testAdd()方法中的assertEquals()方法为Junit4的断言方法,具体如下:
Junit4断言:
void assertEquals(excepted value, actual value) //断言两个值相等
void assertTrue(boolean condition) //断言条件为真
void assertNull(Object object) //断言对象为空
void assertSame(Object expected, Object actual) //断言两个对象的引用相同
void assertArrayEquals(expectedArray, resultArray) //断言预期数组和结果数组相等
当然也有断言条件为假、对象不为空、对象引用不同等方法,并且每个方法都有多种参数类型。
上面测试中的预期结果与实际运行结果都相同,所以单元测试没有报错。
另外一个需要说明的是测试类前几行的@Rule规则标签,定义了规则后所有测试方法都需要遵守该规则,如本例中所有方法运行时间不能超过1秒,否则报错。这个规则是junit4自带的,而且这个构造方法已经过时了,只是为了说明一下用法。
也可以自己定义规则Rule,写一类implement一个TestRule接口,并实现apply()方法,然后就可以在方法里定义自己的规则并像本例中那样使用了。
打包(Suite)测试:
Junit4还有打包(Suite)测试功能,使用方法如下:
@RunWith(Suite.class)
@Suite.SuiteClasses({xx.xx.A.class, xx.xx.B.class})
public class C{}
若想同时测试多个类中的方法,就可以使用打包测试功能,比如想测试A类和B类,就随便建个C类,然后如上这样在C类上加上两行代码就可以了,C类不用写东西。
参数化测试:
如果一个方法想多测几次,可以使用参数化测试,否则只能像上面例子那样
aboutJunit.add(5);
aboutJunit.add(2);
这样一次次的设置参数调用。
参数化测试的类被注解为 @RunWith(Parameterized.class),要有一个带参数的构造方法,用于存储测试参数,要有一个用@Parameters注解的静态方法生成并返回参数,还有有测试方法,示例如下:
注意二维数组不能是int类型,否则会报错。运行结果如下:
打包测试和参数化测试都用到了@RunWith注解,注解的参数是Junit的运行器,没有该注解时会调用默认的运行器。
明天计划的事情:
完成任务1.19-1.21
遇到的问题:
今天只完成了1.18任务Junit测试,没有太大问题。
收获:
学习了使用Junit进行单元测试,学习了Junit注解、断言、打包测试、参数化测试等功能。
Junit4注解:@Test,@Before,@BeforeClass,@After,@AfterClass,@Ignore
@Test:测试一个方法,该方法没有参数和返回值。
@Before:在每次测试方法前执行一次。
@BeforeClass:在类中所有测试方法执行前执行一次。
@Ignore:忽略此方法的测试。
Junit4断言:
void assertEquals(excepted value, actual value) //断言两个值相等
void assertTrue(boolean condition) //断言条件为真
void assertNull(Object object) //断言对象为空
void assertSame(Object expected, Object actual) //断言两个对象的引用相同
void assertArrayEquals(expectedArray, resultArray) //断言预期数组和结果数组相等
当然也有断言条件为假、对象不为空、对象引用不同等方法,并且每个方法都有多种参数类型。
评论