Mockito .thenReturn(list.add()) 实际上在我的列表中添加了一些东西



我正在尝试测试我的一个函数,如果条件为真,它会向数据库添加一些东西。现在在我的测试课上,我试图在列表中模拟它:

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()

因此,您将myString添加到测试用例中的list。这解释了以下内容:

我的列表始终包含对象

再说:

有没有办法防止 list.add(( 被调用?

我认为这里可能对如何使用模拟存在一些误解。

以下行...

when(xxx.addToDatabase()).thenReturn(list.add(myString));

。表示:当调用xxx.addToDatabase()时,返回true,因为list.add()返回布尔值。我怀疑你想要发生的是执行list.add作为xxx.addToDatabase()副作用。如果是这样,那么您可能需要使用 doAnswer 而不是 doReturn .如果您使用 MCVE 更新您的问题,它将更容易指导您。

这是你应该做的。

List<> someList = new ArrayList();
doAnswer(invocation -> {
    someList.add(myString);
     // return something
    }).when(xxx).addToDatabase();

相关内容

  • 没有找到相关文章

最新更新