发表于: 2018-04-03 23:54:22

1 712


今天完成的事情:

任务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) //断言预期数组和结果数组相等

当然也有断言条件为假、对象不为空、对象引用不同等方法,并且每个方法都有多种参数类型。



返回列表 返回列表
评论

    分享到