JMockit 模拟构造函数

2022-09-04 19:39:02

我正在对一个具有复杂构造函数(具有大量参数)的类进行单元测试。构造函数采用三个参数,例如:

public BehavioralDischargeCarePlan_Bus(Webform webForm,String dataEntryModel, String     obsBatId) {

    super(webForm, dataEntryModel, obsBatId);
.....

然后,构造函数调用一个超级构造函数,该构造函数变得更加复杂。使用JMockit,我如何创建类的实例并测试方法而不实际调用构造函数?我是JMockit的新手,任何帮助将不胜感激。

谢谢!


答案 1

如果我正确地理解了你,你想用一个模拟的构造函数测试一个类。这不是一个好的测试方法,因为您没有以最纯粹的形式测试生产代码。

但是,并非所有事情都按照规则进行,不是吗?:)所以如果你坚持,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");
    }
}

模拟代码:

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

测试代码:

// srce/test/java/pkg/SomeTest.java
import org.junit.Test;

public class SomeTest {

    @Test
    public void test() {
        new SomeMock();
        new SomeClass("a", 2);
    }

}

运行生产代码将打印 ,但在测试中运行它将打印 。Production constructor calledMock constructor called


答案 2

推荐