java - JMockit 模拟构造函数

标签 java unit-testing jmockit

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

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

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

然后构造函数调用一个 super 构造函数,它变得更加复杂。使用 JMockit,如何在不实际调用构造函数的情况下创建类的实例并测试方法?我是 JMockit 的新手,我们将不胜感激。

谢谢!

最佳答案

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

然而,并非一切都按规则进行,不是吗? :) 因此,如果您坚持,JMockIt 会让您这样做。您可以只模拟构造函数并测试其他方法。模拟构造函数在 JMockIt project site 中有详细记录。 .

这是一个您可以自己尝试的快速演示:

生产代码:

// 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 called,但在测试下运行它会打印Mock constructor called

关于java - JMockit 模拟构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540627/

相关文章:

java - PMD UselessParentheses 违规

java - 判断一手扑克牌是否顺子的函数?

Java 的内置库(或第 3 方代码)进行基础转换

c# - Xunit 测试不适用于 mongodb 服务

java - 停止 Jmockit 中的模拟

jmockit - 如何在 Jmockit 中模拟私有(private)方法时匹配 'any' 参数类型

java - SQL 语句不适用于 Oracle JDBC

python - 我应该如何对启发式算法进行单元测试?

unit-testing - 从 maven 运行测试时如何查看 IntelliJ IDEA "Test Runner Tab"?

java - 使用 EMMA 获取 ClassFormatError?