![](/img/trans.png)
[英]Mockito: how to mock method with the result depending on one of its parameters?
[英]How to mock a repository method no matter the parameters with mockito
我正在使用 spring 框架并使用 Junit 和 mockito 进行测试。
现在我的服务中有一个方法,它使用了我在测试中创建的一些对象,我们称它们为 configObject1 和 configObject2,我将它们作为参数发送给该方法,然后该方法开始对另一个存储库进行一些调用那些配置对象,那些存储库被模拟并且运行良好,该方法从这些查询/配置对象中创建一个“CalculusResult”列表。 之后,我使用扩展 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> {
}
我不确定,但我认为问题可能是我在测试中创建的 object 与服务中的不同,因为其中一个属性是 sql 它创建的那一刻的日期,所以它可能没有触发测试中的“when(calculusRepository.saveAll(reslist)...”,因为在测试中创建的 object 和在服务中创建的 object 在该属性中具有不同的日期。
如果是这种情况,有没有办法解决它? 还是问题完全不同?
您可以使用 Mockito ArgumentMatchers 来匹配任何参数。
when(calculusResultRepository.saveAll(Mockito.any(List.class))).thenReturn(resList2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.