Компонент SpringBoot, автоматически подключенный из класса Test null - PullRequest
0 голосов
/ 19 октября 2018

У меня есть тестовый класс, в котором @Autowired есть два разных класса. Один из них - @Service, а другой - @ RestController.

Когда я использую @Service, он отлично работает.

Когда я использую @RestController, он генерирует исключение NullPointerException.

Есть ли какая-то причина, по которой он не может подключить контроллер?Я подумал, что это может быть связано с созданием веб-контекста, но я также попытался добавить SpringBootTest с веб-средой, указывающей на MOCK (и другие), чтобы посмотреть, получит ли это его.

Я также обошел вокругMockMvc, но я не совсем уверен, как это должно работать.

Есть ли способ легко вызвать один из этих контроллеров, чтобы выполнить полный интеграционный тест?

@Autowired
private ThingService tservice;

@Autowired
private ThingController tconn;

@Test
public void testRunThing() {
    Thing t = new Thing(1, "Test");
    tservice.configureThing(t);
    Thing t2 = new Thing(1, "Second thing");
    tconn.getThing(t2);

    t3 = tservice.findThing(1);
    assertEqual(t3.getValue(), "Second thing");
}

The *Функция 1015 * выполняет некоторые функции, в том числе в конечном итоге сохраняется в БД (в данном случае это H2, который, в свою очередь, автоматически подключен через репозиторий).

Функция tconn обрабатывает обновление так, как если бы оно было отправленодо остальной конечной точки (в этом случае она обновит «вещь» с идентификатором 1 до нового строкового значения)

нулевой указатель появляется при вызове tconn.getThing().

1 Ответ

0 голосов
/ 19 октября 2018

Простой пример использования MockMvc: Тестовый класс

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class LoginControllerTest {

    @Autowired
    private MockMvc mockMvc;

Простой тест

        @Test
        public void loginOk() throws Exception {
            this.mockMvc.perform(post("/login").param("username", "name")
                    .param("password", "1111" )).andExpect(status().isOk())
         .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8));
        }

Если вы хотите просто проверить, что это объект в ответ, вы можете использовать

 .andExpect(content().json("{}"));

пустой массив в ответе

 .andExpect(content().json("[]"));

массив с двумя объектами

.andExpect(content().json("[{}, {}]"));

если вы хотите получить точный результат, вы можете получить его в виде строки json, а затем проанализировать.

 MvcResult result = this.mockMvc.perform(post("/login").param("username", "name")
                    .param("password", "1111" )).andExpect(status().isOk())
                    .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)).andReturn();
String resultJsonString = result.getResponse().getContentAsString();

Вам нужна зависимость

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...