[英]Unit testing with Mockito resets a mocked class' instance variable to null
我模拟了一个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对象,而是指向不具有真实功能的模拟对象。 如果要让模拟对象从getCategory()返回值,则也必须模拟该值。 就像是:
when(message.getCategory()).thenReturn("My Category");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.