Интеграционный тест для DB H2 и для контроллера - PullRequest
0 голосов
/ 12 июня 2018

В моей программе два интеграционных теста, и, к сожалению, оба не работают.Я не знаю, что это хорошая идея написать обе проблемы в одном случае, но я пытаюсь.Во-первых, я показываю свой тест интеграции БД:

@RunWith(SpringRunner.class)
@DataJpaTest
public class TeamDatabaseIntegrationTest {

    @MockBean
    private TeamRepository teamRepository;

    @Autowired
    private TestEntityManager testEntityManager;

    @Test
    public void testDb() {
        Team team = new Team(1L, "teamName", "teamDescription", "krakow", 7);
        Team team2 = new Team(2L, "teamName", "teamDescription", "krakow", 7);
        testEntityManager.persist(team);
        testEntityManager.flush();

        Iterable<Team> teams = teamRepository.findAll();
        assertThat(teams).hasSize(2).contains(team, team2);
    }

В этом тесте я добавляю 2 элемента в свою базу данных и ожидаю, что этот тест в порядке, но он возвращает это:

java.lang.AssertionError: 
Expected size:<2> but was:<0> in:
<[]>

В моемВторой тест Я хочу проверить метод контроллера показать все элементы.Это мой метод в cotroller:

@GetMapping("/teams")
    public List<TeamDto> findAll() {
        return teamService.findAll();
    }

Мой метод тестирования для этого выглядит следующим образом: @SpringJUnitWebConfig (classes = CrewApplication.class)

public class TeamControllerMethodIntegrationTest {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setup() throws Exception
    {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.webApplicationContext).build();
        MockitoAnnotations.initMocks(this);
    }

    @Test
    void getAccount() throws Exception {
        this.mockMvc.perform(get("/teams")
                .accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/json;charset=UTF-8"))
                .andExpect(jsonPath("$version").value(null))
                .andExpect(jsonPath("$name").value("Apacze"))
                .andExpect(jsonPath("$createOn").value(null))
                .andExpect(jsonPath("modifiedOn").value(null))
                .andExpect(jsonPath("$description").value("grupa programistow"))
                .andExpect(jsonPath("$city").value("Włocławek"))
                .andExpect(jsonPath("$headcount").value(null));
    }
}

В этом случае у меня есть другая ошибка,

java.lang.NullPointerException
    at com.softwaremind.crew.people.integrationTest.TeamControllerMethodIntegrationTest.getAccount

Я борюсь с этими тестами в течение недели, и я действительно не знаю, как это исправить.

1 Ответ

0 голосов
/ 12 июня 2018

В первом случае замените

@MockBean
private TeamRepository teamRepository;

на

@Autowired
private TeamRepository teamRepository;

(вы не можете использовать mock и ожидать, что он вернет значения из памяти в дБ)

Дляты второй тест.Удалите @SpringJUnitWebConfig и аннотируйте его с помощью

@RunWith(SpringRunner.class)
@WebMvcTest()

и добавьте Autowired в MockMvc

@Autowired
private MockMvc mockMvc;

EDIT

Дополнительно удалите метод setup(), так как все должно быть уже настроено,(а затем вам также не нужен атрибут webApplicationContext) и утверждайте, что используемая вами аннотация теста - org.junit.Test (проверьте ваш импорт)

...