如何模拟JPA存储库以将其用于Junit测试?

时间:2019-04-10 09:48:25

标签: java unit-testing spring-data-jpa mockito junit5

修改后我无法保存到对象。

我正在将对象的属性设置为新值,当我要保存时,会收到NullPointerException

/* La méthode à tester */
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);
}

/*Le 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());
}

Je fais le debug,je vois que les设置了{@ {1}}的被动属性,problèmeest au niveau du的属性

2 个答案:

答案 0 :(得分:0)

在使用Junit5时,请确保您的代码中包含其中之一来初始化模拟:

@ExtendWith(MockitoExtension.class) on the test class

@BeforeEach
void beforeEachTest() {
    MockitoAnnotations.initMocks(this);
    rem = new Rem();
}

此外,您需要确保已手动或通过在SUT中使用@InjectMocks批注注入了模拟。

最后,请确保在调用实际的SUT方法之前已完成所有模拟设置。

答案 1 :(得分:0)

谢谢@Maciej Kowalski,我添加了注释@InjectMocks,现在是测试工作。