我有以下课程。
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);
}
同样,一般应该避免部分模拟和私有方法/构造函数的模拟。