无法模拟crudrepository保存方法


@ExtendWith(MockitoExtension.class)
class taskTestMain {
@InjectMocks
task task1;

@Mock
private statusRepository statusRepo;


@Mock
status statusRec;
@Test
void test() {
Mockito.when(statusRepo.save(statusRec)).thenReturn(statusRec);
task1.method();
}
}
class task
{
method()
{
statusRec = statusRepo.save(statusRec); //after this step I get Potential stubbing exception 
}}

我已经尝试了几种方法。我不明白这是怎么回事。请建议如何进行。下面我粘贴了junit错误。task-严格的存根参数不匹配。请检查:

  • 这个'save'方法的调用:statusRepo.save(status@8bffb8b);→task.run (task.java: 80)
  • 有以下带有不同参数的存根:statusRepo.save (status@26a2f7f9);→.taskTestMain.test (taskTestMain.java: 110)通常,存根参数不匹配表明用户在编写测试时犯了错误。Mockito早失败,这样你就可以很容易地调试潜在的问题。

感谢您的宝贵时间

老实说,我不是很确定,但我有一个猜测。

Mockito.when(statusRepo.save(statusRec)).thenReturn(statusRec);

使用这个存根,您只是想返回传递给save方法的第一个参数?如果这是真的,那么有一种更通用的方法可以做到这一点。

when(statusRepo.save(any(TcMdhTotemConsensusStatus.class))).then(returnsFirstArg());

这个存根将始终返回传递给save的第一个参数方法。
查看stackoverflow帖子获取更多信息。如果您的Java或Mockito版本不匹配,也有一些替代方案。

最新更新