我模拟了一个Message类如下(在TestNG单元测试类中):
@BeforeMethod
protected void setUp() {
message = mock(Message.class);
}
我可以向您保证,我已经在单元测试类中声明了Message
类型的message
。现在,Message
类有一个名为category
的实例变量,其类型为String,如下所示:
public class Message {
private String category;
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
}
好吧,现在的问题是:在一个小的测试方法中,我必须设置一个模拟的message
实例的category
,然后将该category
用于单元测试中的另一个任务。然而,在我为mocked
消息设置了category
之后,它再次返回到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
。我已经想了两天了,但似乎我错过了什么。因此,任何帮助都将不胜感激。
您可以使用spy()而不是Mock()
。然后您可以保持设定值。你还有其他选择。您可以使用doReturn("F1 Racing").when(message).getCategory();
返回要返回的值。
"message"句柄不指向真正的message对象,而是指向一个没有真正功能的模拟对象。如果你想让mock对象从getCategory()返回一个值,你也必须对它进行mock。类似于:
when(message.getCategory()).thenReturn("My Category");