from Jmockit 中文网 http://jmockit.cn/showArticle.htm?channel=4&id=14
有些编写不良好的类的构造函数,初始代码块,静态代码块存在大量的初始化逻辑,初始化会报错。
比如,有些类初始化的时候就去连结DB,连不上就报错。这很影响我们的测试程序的运行。
此时,我们需要把这些初始化逻辑Mock掉。用我们的Mock逻辑替代。要Mock这些初始化代码,很简单。见如下的例子:
//一个包含初始代码块的普通类
public class AnOrdinaryClassWithBlock {
private int i;
public static int j;
// 初始代码块
{
i = 1;
}
// 静态初始代码块
static {
j = 2;
}
// 构造函数
public AnOrdinaryClassWithBlock(int i) {
this.i = i;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
//Mock构造函数&初始代码块
public class ConstructorAndBlockMockingTest {
// AnOrdinaryClassWithBlock的MockUp类,继承MockUp即可
public static class AnOrdinaryClassWithBlockMockUp extends MockUp<AnOrdinaryClassWithBlock> {
// Mock构造函数和初始代码块, 函数名$init就代表类的构造函数
@Mock
public void $init(int i) {
}
// Mock静态初始代码块,, 函数名$init就代表类的静态代码块
@Mock
public void $clinit() {
}
}
@Test
public void testClassMockingByMockUp() {
new AnOrdinaryClassWithBlockMockUp();
AnOrdinaryClassWithBlock instance = new AnOrdinaryClassWithBlock(10);
// 静态初始代码块被mock了
Assert.assertTrue(AnOrdinaryClassWithBlock.j == 0);
// 构造函数和初始代码块被mock
Assert.assertTrue(instance.getI() == 0);
}
}
原文:https://www.cnblogs.com/wiggins/p/12058669.html