java - 如何模拟 JPA 存储库以使用 Junit 进行测试?
问题描述
修改后我无法保存对象。
我正在将对象的属性设置为新值,当我要保存时,我收到一个NullPointerException
.
/* The method to be tested */
public Rem afterInitRem(Rem rem) {
/** Initialize regles with status MISSING **/
List<Regle> regles = rem.getRegles();
Regle regle = new Regle();
regle.setCode("REGLE1");
regle.setStatus(RegleStatus.MISSING);
regles.add(regle);
return remRepository.save(rem);
}
/*The test*/
@Mock
private RemRepository remRepository;
@BeforeEach
void beforeEachTest() {
rem = new Rem();
}
@AfterEach
void reInitVar() {
beforeEachTest();
}
@Test
public void afterInitRemTest() {
target.afterInitrem(rem);
when(remRepository.save(any(Rem.class))).thenReturn(rem);
ArgumentCaptor<Rem> argument = ArgumentCaptor.forClass(Rem.class);
verify(regleRepository).save(argument.capture());
assertEquals("REGLE1", argument.getValue().getRegles().get(0).getCode());
assertEquals(RegleStatus.MISSING, argument.getValue().getRegles().get(0).getStatus());
assertEquals(1, argument.getValue().getRegles().size());
}
我在调试,看到属性设置好了,问题出在return remRepository.save(rem);
解决方案
当您使用 Junit5 时,请确保您的代码中有任何一个来初始化模拟:
@ExtendWith(MockitoExtension.class) on the test class
或者
@BeforeEach
void beforeEachTest() {
MockitoAnnotations.initMocks(this);
rem = new Rem();
}
此外,您需要确保您已手动或使用@InjectMocks
注释将模拟注入 SUT。
最后,确保在调用实际 SUT 方法之前完成所有模拟设置。
推荐阅读
- jenkins - 在 jenkins 构建管道中运行 serverspec 脚本
- typescript - 打字稿中的记录类型是什么?
- netlogo - 流量问题,Netlogo
- c++ - c ++输出数组中的最高元素
- reactjs - 在 Redux 中更新深度嵌套数组的状态时遇到问题
- java - 如何在没有注入列表的情况下直接获取 Spring 中排序最高的 bean?
- reactjs - 如何在不重新渲染的情况下更改图标的颜色(TextField 失去焦点)
- java - 如何处理/优化 Android 应用程序中的高内存使用情况
- sql - SQL - 提取两个字符之间的子字符串
- vba - 为什么我在此 MyCell 范围错误中出现类型不匹配?