JUnit总结
参考于https://segmentfault.com/a/1190000006731125
https://www.cnblogs.com/paxing/p/12835479.html
1.测试类型:
1.单元测试:单一类中代码是否正确
2.集成测试:检查开发的模块和其他模块整合时是否正常工作
3.端对端的测试:将整个系统作为一个整体, 然后从用户的角度进行测试的
2.单元测试基本概念
3.Junit4
1.导入依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
2.常用方法与注解
创建一个mock对象
//1.1 完全模拟mock
List mockedList = Mockito.mock(List.class)
//1.2 如果要使用注解,必须打开注解开关:MockitoAnnotations.initMocks(this);
@Mock
List mockedList;
//2 @spy 对函数的调用均执行真正部分
@Spy
List list = new LinkedList();
//3 @InjectMock 创建一个实例,简单的说是这个Mock可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。
@Mock:对函数的调用均执行mock(即虚假函数),不执行真正部分。
@Spy:对函数的调用均执行真正部分。
设置mock对象的行为
设置mock对象调用某个方法的返回值:
when(mockedList.get(0)).thenReturn("想要的结果");
doReturn("想要的结果")when(mockedList).get(0);
设置调用方法时抛出某个异常:
when(mockedList.get(1)).thenThrow(new RuntimeException());
验证mock对象的行为
验证mock对象是否调用过某个方法
verify(mockedList).add("one");
验证某个mock对象是否从未使用过:
verifyZeroInteractions(mockedList);
其他
@Test (expected = Exception.class) 表示预期会抛出Exception.class 的异常
@Ignore 含义是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore注解删去,就可以进行正常的测试。
@Test(timeout=100) 表示预期方法执行不会超过 100 毫秒,控制死循环
@Before 表示该方法在每一个测试方法之前运行,可以使用该方法进行初始化之类的操作
@After 表示该方法在每一个测试方法之后运行,可以使用该方法进行释放资源,回收内存之类的操作
@BeforeClass 表示该方法只执行一次,并且在所有方法之前执行。一般可以使用该方法进行数据库连接操作,注意该注解运用在静态方法。
@AfterClass 表示该方法只执行一次,并且在所有方法之后执行。一般可以使用该方法进行数据库连接关闭操作,注意该注解运用在静态方法。