我有以下课程。

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块来验证在测试治具对象上执行的方法,但是这里没有。

最佳答案

可以这样做,尽管很可能不应该进行任何适当的书面测试:

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


同样,一般应该避免部分模拟和私有方法/构造函数的模拟。

09-25 16:46