MongoDB 模拟从返回 null

MongoDB mock returning null from

我 运行 使用 SpringRunner 测试用例并使用 MockBean 查找文档

我的测试用例如下代码 -

List<SomeClass> dummySomeClassList = Arrays.asList(new SomeClass("1", "example"), new SomeClass("2", "example2"));
@MockBean
private FindCollectionDocument findCollectionDocument;

当我使用以下内容时,它不是 returning 列表,而是它的 null

Mockito.when(findCollectionDocument.findCollection(Mockito.mock(SomeClass.class))).thenReturn(dummySomeClassList());

实际class有以下代码-

List<SomeClass> someClassList = findCollectionDocument.findCollection(someClassObject);

期望我的代码 return 在测试 class 中分配的 someClassList,但它没有 returning 任何东西并且是空白的。 如何在主 class 中获取 dummySomeClassList(来自测试 class)return?

您不应使用任何模拟作为 findCollection() 方法参数,而应使用 org.mockito.ArgumentMatchers

Mockito.when(findCollectionDocument.findCollection(any(SomeClass.class)))
                                    .thenReturn(dummySomeClassList)

所以,在这一行中你说:当在我的模拟对象 findCollectionDocument 上调用带有任何类型 SomeClass 参数的 findCollection() 方法时,然后 return dummySomeClassList.

在你的版本中你说:当在我的模拟对象 findCollectionDocument 上调用带有参数 Mockito.mock(SomeClass.class)findCollection() 方法时,然后 return dummySomeClassList。并且在测试期间,findCollection() 方法未使用此类参数调用,因此模拟非 void 方法的默认值为 returned,即 null.

我的主要class有如下代码

Class ExampleA implements A{
private Map<String, Object> exMap;
 
@Override
pubic void doSomeThing1(){
// Method will set the exMap value
doSomeThing2(exMap.get(someClassObj))
}
@Override
pubic void doSomeThing2(SomeClass obj){
// Method will get and use exMap value for further processing
    }
}

我正在为 doSomething2 编写 junit 测试用例,我正在尝试模拟从 doSomething1 获得的地图并在 doSomething2 中使用该地图

Mockito.when(exMap.get("sequenceInformation")).thenReturn((SomeClass)exMap.get("someClass"));

但它没有 return 任何东西,如何在我从 doSomething1 方法获得的 doSomething2 方法中模拟该映射?