把学习到的零碎的东西做一个总结,方便系统的学习和使用。以下内容均为转载,已注明出处。
一、JUnit4
1、idea中的JUnit4的安装与配置
转载自https://blog.csdn.net/hanchao5272/article/details/79197989
2、Junit4常用注解与方法
转载自https://blog.csdn.net/luvinahlc/article/details/10442743
① @Before:初始化方法,在任何一个测试执行之前必须执行的代码。 跟3.X中的setUp()方法具有相同功能。
② @After:释放资源,在任何测试执行之后需要进行的收尾工作。跟3.x中的 tearDown ()方法具有相同功能。
③ @Test:测试方法,表明这是一个测试方法。在Junit中将会自动被执行。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。
该annotation可以测试期望异常和超时时间,如@Test(timeout = 100),我们给测试函数设定一个执行时间,超过了这个时间(100毫秒),它们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。
同时还可以测试期望的异常,例如:@Test(expected=IllegalArgumentException.class)
④ @Ignore:忽略的测试方法,标注的含义就是“某些方法尚未完成,暂不参与此次测试”;这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。
⑤ @BeforeClass:针对所有测试,在所有测试方法执行前执行一次,且必须为public static void;此annotataion为4.x新增功能。
⑥ @AfterClass:针对所有测试,在所有测试方法执行结束后执行一次,且必须为public static void;此annotataion为4.x新增功能。
本文图片转载自:https://www.cnblogs.com/libingbin/p/6007203.html
3、Junit编程规范
转载自https://blog.csdn.net/luvinahlc/article/details/10442743
① 单元测试代码应位于单独的Source Folder下。
② 测试类应跟被测试类位于统一package下
③ 选择有意义的测试方法名
④ 保持测试的独立性
⑤ 为暂未实现的测试代码抛出失败(fail)或忽略(ignore)
⑥ 在调用断言(assert)方法时给出失败的原因
二、Mockito
Mock:用一个自己创建的假对象来替换真是的对象,达到预期效果,并不会对原类,原对象产生改变。
模拟外部依赖对象
Mockito:①验证某实例的某方法在测试中是否被调用、被调用了多少次。
②跳过某实例的某方法的实际执行内容,直接返回设置的结果。
1、一般使用Mockito的步骤:
转载自:https://www.jianshu.com/p/eae0187900f8
(1)模拟任何外部依赖并将这些模拟对象插入测试代码中
(2)执行测试中的代码
(3)验证代码是否按照预期执行
2、使用Mockito
参考自:https://www.cnblogs.com/Ming8006/p/6297333.html#c1.1
(1)添加依赖与引用
//添加maven依赖
org.mockito
mockito-all
1.9.5
test
//添加junit依赖
junit
junit
4.11
test
//添加引用
import static org.mockito.Mockito.*;
import static org.junit.Assert.*;
(2)模拟对象
以下转载自:https://www.cnblogs.com/zishi/p/6760272.html
创建 Mock 对象的语法为 mock(class or interface)。
(3)设置对象调用的预期返回值
通过 Mockito.when(mock.someMethod()).thenReturn(value) 来设定 Mock 对象某个方法调用时的返回值。
通过 Mockito.when(mock.someMethod()).thenThrow(new RuntimeException) 的方式来设定当调用某个方法时抛出的异常。
(4)验证被测试类方法
在 Mockito 中验证 Mock 对象交互行为的方法是 Mockito.verify(mock).someMethod(…)。
最后 Assert() 验证返回值是否和预期一样。
三、@InjectMocks
转载自:https://www.jianshu.com/p/bb705a56f620
@Mock:创建一个Mock。
@InjectMocks:创建一个实例,其余用@Mock注解创建的mock将被注入到用该实例中。
四、PowerMockito
1、mock viod方法
class Hi {
public void mockParentMethod() {
System.out.println("mockSuperMethod Hi");
}
}
class Hello extends Hi {
private Kitty kitty;
public Hello() {}
public void mockVoidMethod() {
kitty.say3();
System.out.println("partialMock");
}
public Kitty getKitty() {
return kitty;
}
public void setKitty(Kitty kitty) {
this.kitty = kitty;
}
}
@Test
public void testMockVoidMethod() {
Hello hello = new Hello();
Kitty kitty = PowerMockito.mock(Kitty.class);
hello.setKitty(kitty);
PowerMockito.doNothing().when(kitty).say3();
hello.mockVoidMethod();
}