Spring Framework используется в модульном тесте? - PullRequest
0 голосов
/ 15 мая 2018

Я готовлюсь к сдаче Spring Certification v5.0 и возникает вопрос: Используете ли вы Spring в модульном тесте? Ссылка на экзаменСправочные вопросы .

От Справочное руководство по Spring Я знаю это:

POJO, составляющие ваше приложение, должны тестироваться в тестах JUnit или TestNGс объектами, которые просто создаются с использованием оператора new, без Spring или любого другого контейнера .

Из моего исследования я также могу сказать, что мы используем Spring только при тестировании контроллеров (как ниже), репозитории или при создании интеграционных тестов и, возможно, некоторые другие случаи.В этих случаях нам понадобится TestContext, который является частью пакета org.springframework. *.

@ RunWith (SpringRunner.class)

@ WebMvcTest (HelloWorldController.class)

Итак, правильный ответ на этот вопрос: Нет, мы не используем Spring? или что, Да, нам это нужно .Потому что мы, очевидно, используем его в некоторых случаях.

1 Ответ

0 голосов
/ 15 мая 2018

Первый абзац, который вы упомянули, является ответом на ваш вопрос: вам не нужно, чтобы Spring писал модульные тесты для написанных вами классов, даже если они являются бобами Spring.

Другие упомянутые вами случаи на самом деле не являются юнит-тестами. При тестировании репозитория с использованием SpringRunner и фиктивной базы данных вы больше не пишете модульный тест, а интеграционный тест . То же самое относится и к написанию тестов для вашего контроллера с использованием MockMvc. В обоих случаях вы тестируете интеграцию между средой Spring (Spring MVC или Spring Data) с вашим кодом (и базой данных).

Однако вы можете написать модульные тесты для вашего контроллера, но в этом случае вы бы предпочли сделать что-то вроде этого:

@Controller
public class HelloWorldController {
    @RequestMapping("/hello")
    public ModelAndView getHello() {
        return new ModelAndView("hello", "title", "hello world");
    }
}

public class HelloWorldControllerTest {
    private HelloWorldController controller;

    @Before
    public void setUp() {
        controller = new HelloWorldController();
    }

    @Test
    public void getHelloShouldUseHelloView() {
       assertThat(controller.getHello().getViewName()).isEqualTo("hello");
    }

    @Test
    public void getHelloShouldAddATitleModel() {
        assertThat(controller.getHello().getModel()).containsEntry("title", "Hello world");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...