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); } }