无法模拟 crudrepository 保存方法
Posted
技术标签:
【中文标题】无法模拟 crudrepository 保存方法【英文标题】:unable to mock crudrepository save method 【发布时间】:2021-04-26 10:52:48 【问题描述】:@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错误。任务 - 严格的存根参数不匹配。请检查:
此“保存”方法的调用:statusRepo.save(status@8bffb8b); -> 在 task.run(task.java:80) 具有以下具有不同参数的存根:1. statusRepo.save(status@26a2f7f9 ); -> 在 .taskTestMain.test(taskTestMain.java:110) 通常,存根参数不匹配表明用户在编写测试时犯了错误。 Mockito 会提前失败,以便您轻松调试潜在问题。感谢您的宝贵时间
【问题讨论】:
错误很清楚,你有不同的论点。当您模拟保存方法时,您需要确保您传递的是相同的对象。因此你的equals和hashcode方法不好,先检查一下 【参考方案1】:说实话,我对此并不完全确定,但我有一个猜测。
Mockito.when(statusRepo.save(statusRec)).thenReturn(statusRec);
有了这个存根,您只是想返回传递给save
方法的第一个参数?如果这是真的,那么有一种更通用的方法可以做到这一点。
when(statusRepo.save(any(TcMdhTotemConsensusStatus.class))).then(returnsFirstArg());
此存根将始终返回传递给您的save
的第一个参数
方法。
请参阅this *** post 了解更多信息。如果您的 Java 或 Mockito 版本不匹配,还有一些替代方案。
【讨论】:
谢谢 Jan. 这很有帮助以上是关于无法模拟 crudrepository 保存方法的主要内容,如果未能解决你的问题,请参考以下文章
如何修复CrudRepository.save(java.lang.Object)是springboot中的无法访问方法?
CRUDRepository 中的 Update 或 saveorUpdate
Spring Data CrudRepository 的保存抛出 InvocationTargetException
Spring Data CrudRepository 作为方法 Bean