gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:40:43 27 4
gpt4 key购买 nike

我有以下类(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com