使用 Mockito 进行单元测试将模拟类的实例变量重置为 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"句柄不指向真正的message对象,而是指向一个没有真正功能的模拟对象。如果你想让mock对象从getCategory()返回一个值,你也必须对它进行mock。类似于:

when(message.getCategory()).thenReturn("My Category");

相关内容

  • 没有找到相关文章

最新更新