如何使用mockito模拟存储库方法,无论参数如何



我正在使用spring框架,并使用Junit和mockito进行测试。

现在,我的服务中有一个方法,它使用了我在测试中创建的几个对象,让我们称它们为configObject1和configObject2,我将它们作为参数发送给该方法,然后该方法开始沿着这些配置对象对另一个存储库进行一些调用,这些存储库被模拟并运行良好,该方法生成了一个";微积分结果";从那些查询/configObjects。之后,我使用一个扩展CRUDRepository的存储库,并创建saveAll((。然后,它应该返回一个带有实体的迭代,但由于某种原因,在saveAll方法之后,它返回了一个空列表。

测试:

@Test
...
configObject1 conf1 = new configObject1 (...);
configObject2 conf2 = new configObject2 (...);
Calculusresult calcRes = new CalculusResult(null,...,new java.sql.Date(system.currentTimeMilis()),...);
List<CalculusResult> resList= new ArrayList<CalculusResult>();
resList.add(calcRes);
Calculusresult calcRes2 = new CalculusResult(1,...,new java.sql.Date(system.currentTimeMilis()),...);
List<CalculusResult> resList2= new ArrayList<CalculusResult>();
resList2.add(calcRes2);
when(calculusResultRepository.saveAll(resList)).thenReturn(resList2);
...
assertTrue(!response.isEmpty())

来自服务的方法:

...//The method is building the list of calculusResults
resCalc.setDate(new java.sql.Date(system.currentTimeMilis()))
resList.add(calcres);//CalculusResult object is added to the list, this object is well made
List<CalculusResult> savedResults = (List<CalculusResult>) calculusResultRepository.saveAll(resList); //This returns an empty list (If I don't cast, it also returns nothing)
for(CalculusResult calcres : savedResults){
... //This makes nothing because savedResults is empty, making the response empty and failing the test.

存储库:

@Repository
public interface CalculusResultRepository extends CrudRepository<CalculusResult, Long> {
}

我不确定,但我认为问题可能是我在测试中创建的对象与服务中的对象不同,因为其中一个属性是创建时的sql日期,所以可能它没有触发";当(calculusRepository.saveAll(reslist(…";在测试中,因为在测试中创建的对象和在服务中创建的那个对象在该属性中具有不同的日期。

如果是这样的话,有办法解决吗?还是问题完全不同?

您可以使用Mockito ArgumentMatchers来匹配任何参数。

when(calculusResultRepository.saveAll(Mockito.any(List.class)))
.thenReturn(resList2);

最新更新