java - 验证私有(private)构造函数未使用 JMockit 调用/调用

标签 java unit-testing junit junit4 jmockit

我有以下类(class)。

public Task {

    public static Task getInstance(String taskName) {
        return new Task(taskName);
    }

    private Task(String taskName) {
        this.taskName = taskName;
    }
}

我正在使用 JMockit 测试 Task.getInstance()。在测试时,我需要验证是否确实调用了 private Task()。我之前使用了 Verifications block 来验证测试夹具对象上的方法执行,但这里我没有。

最佳答案

这是可以做到的,尽管它很可能不应该在任何正确编写的测试中:

@Test
public void badTestWhichVerifiesPrivateConstructorIsCalled()
{
    new Expectations(Task.class) {{ // partially mocks `Task`
        // Records an expectation on a private constructor:
        newInstance(Task.class, "name");
    }};

    Task task = Task.getInstance("name");

    assertNotNull(task);
}

@Test
public void goodTestWhichVerifiesTheNameOfANewTask()
{
    String taskName = "name";

    Task task = Task.getInstance(taskName);

    assertNotNull(task);
    assertEquals(taskName, task.getName());
}

@Test
public void goodTestWhichVerifiesANewTaskIsCreatedEverytime()
{
    Task task1 = Task.getInstance("name1");
    Task task2 = Task.getInstance("name2");

    assertNotNull(task1);
    assertNotNull(task2);
    assertNotSame(task1, task2);
}

同样,通常应避免部分模拟和私有(private)方法/构造函数的模拟。

关于java - 验证私有(private)构造函数未使用 JMockit 调用/调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703232/

相关文章:

c++ - 使用 CppUnit 进行内存泄漏检测

java - Junit 和 EasyMock 理解澄清

java - 单击 fragment ListView 上的项目后如何刷新数据

带有按键监听器的 Java swing gui 程序在 Linux 中不起作用

node.js - 如何对池连接进行单元测试?

javascript - Jest 测试上下文/监视在函数外部创建的模拟变量(类级别)

java - 如何在 Mockito JUnit 中对 setter 方法进行单元测试

java - Mockito 何时不模拟而不是调用实际方法

java - Java 中的 ZigZag 线

java - iText 生成包含横向和纵向页面的 PDF