Как смоделировать репозиторий JPA, чтобы использовать его для тестирования с Junit? - PullRequest
2 голосов
/ 10 апреля 2019

Я не могу сохранить объекты после изменений.

Я устанавливаю атрибуты объекта на новые значения, когда я ищу сохранить, я получаю 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());
}

Дела отладки, перевоплощения в историю, Прошлое, проблемы с музыкой return remRepository.save(rem);

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Спасибо @Maciej Kowalski, я добавляю аннотацию @InjectMocks, теперь тест работает.

0 голосов
/ 10 апреля 2019

Поскольку вы используете Junit5, убедитесь, что в вашем коде есть что-то из этого для инициализации макетов:

@ExtendWith(MockitoExtension.class) on the test class

или

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

Кроме того, вам необходимо убедиться, чточто вы внедрили макет вручную или с помощью аннотации @InjectMocks в SUT.

И, наконец, убедитесь, что вы выполнили все настройки макета перед вызовом фактического метода SUT.

...