我正在尝试测试我的一个函数,如果条件成立,它会向数据库添加一些内容。 现在在我的测试类中,我试图在列表中模拟它:
List list = new ArrayList();
String myString = "";
when(xxx.addToDatabase()).thenReturn(list.add(myString));
所以如果我的条件成立,这个断言应该是正确的:
AssertTrue(list.contains(Object)).
如果我的条件为假,则该断言应适用:
AssertFalse(list.contains(Object));
所以我的问题是,我的列表始终包含该对象,因为 .thenReturn
似乎被调用,即使它实际上没有被调用。
有没有办法阻止 list.add()
被调用?
最佳答案
这一行:
when(xxx.addToDatabase()).thenReturn(list.add(myString));
... 在您的测试中调用,无论xxx.addToDatabase()
是否在测试代码中调用。 p>
因此,您将 myString
添加到测试用例中的 list
中。这解释了以下内容:
my list always contains the Object
回复:
Is there a way to prevent the list.add() being called?
我认为这里可能对如何使用模拟存在一些误解。
以下行...
when(xxx.addToDatabase()).thenReturn(list.add(myString));
... 表示:当调用 xxx.addToDatabase()
时,则返回 true
,因为 list.add()
返回 boolean 值。我怀疑您想要发生的事情是执行 list.add
作为 xxx.addToDatabase()
的副作用。如果是这样,那么您可能需要使用 doAnswer
而不是 doReturn
。如果您使用 MCVE 更新您的问题它将更容易指导您。
关于java - Mockito .thenReturn(list.add()) 实际上向我的列表中添加了一些内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48203968/