use*_*erx 11 java unit-testing jmockit
我是一个单元测试一个具有复杂构造函数(具有大量参数)的类.构造函数有三个参数,如:
public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String obsBatId) {
super(webForm, dataEntryModel, obsBatId);
.....
Run Code Online (Sandbox Code Playgroud)
然后构造函数调用一个更复杂的超级构造函数.使用JMockit,如何在不实际调用构造函数的情况下创建类的实例并测试方法?我是JMockit的新手,任何帮助都将不胜感激.
谢谢 !
joe*_*cii 14
如果我理解正确,你想用模拟的构造函数测试一个类.这不是一个好的测试方法,因为您没有以最纯粹的形式测试生产代码.
然而,并非一切都按照规则进行,是吗?:)所以如果你坚持,JMockIt会让你这样做.您可以只模拟构造函数并测试其他方法.模拟构造函数在JMockIt项目站点上有详细记录.
以下是您可以自己尝试的快速演示:
生产代码:
// src/main/java/pkg/SomeClass.java
public class SomeClass {
public static void main(String[] args) {
new SomeClass("a", 2);
}
public SomeClass(String a, Integer b) {
System.out.println("Production constructor called");
}
}
Run Code Online (Sandbox Code Playgroud)
模拟代码:
// src/test/java/pkg/SomeMock.java
import mockit.Mock;
import mockit.MockUp;
public class SomeMock extends MockUp<SomeClass> {
@Mock
public void $init(String a, Integer b) {
System.out.println("Mock constructor called");
}
}
Run Code Online (Sandbox Code Playgroud)
测试代码:
// srce/test/java/pkg/SomeTest.java
import org.junit.Test;
public class SomeTest {
@Test
public void test() {
new SomeMock();
new SomeClass("a", 2);
}
}
Run Code Online (Sandbox Code Playgroud)
将打印运行生产代码Production constructor called
,但将在打印时运行它Mock constructor called
.