我已按如下方式(在TestNG单元测试类中)模拟了一个Message类:
@BeforeMethod
protected void setUp() {
message = mock(Message.class);
}
我可以向您保证,我已在Unit测试类中声明message
类型Message
。现在,Message
类有一个名为category
的实例变量,其类型为String,如下所示:
public class Message {
private String category;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
好的,现在问题是:在一个小的测试方法中,我必须设置模拟的category
实例的message
,然后将category
用于单元测试中的另一个任务。但是,在为category
消息设置mocked
后,它又会再次恢复为null
。这是代码:
public void shouldSendMessagesWithCategory() {
message.setCategory("F1 Racing"); // SET THE CATEGORY
raceResults.addSubscriber("F1 Racing", clientA);
System.out.println("Cat" + message.getCategory()); // THE MESSAGE's CATEGORY IS NULL
raceResults.send(message);
verify(clientA).receive(message);
}
控制台打印出null
- 所以我肯定知道它是null
。我一直试图弄清楚这两天,但似乎我错过了一些东西。所以任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以使用spy()代替Mock()
。然后你可以保持设定值。你有另一种选择。您可以使用doReturn("F1 Racing").when(message).getCategory();
返回要返回的值。
答案 1 :(得分:1)
“message”句柄不指向真正的Message对象 - 它指向一个没有真实功能的模拟对象。如果你想让mock'ed对象从getCategory()返回一个值,你也必须模拟它。类似的东西:
when(message.getCategory()).thenReturn("My Category");