繁体   English   中英

使用Mockito进行单元测试会将模拟类的实例变量重置为null

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM