Проверка bean-компонентов в методе обслуживания во время тестов с помощью Spring MockMvc - PullRequest
0 голосов
/ 17 июня 2020

У меня есть веб-приложение Spring 5, которое выполняет проверки только для DTO уровня обслуживания. То есть входящий запрос не проверяется в контроллере, но DTO, переходящий в метод уровня обслуживания, проверяется на этом уровне. Это требование, потому что именно так это делается в других приложениях, и другие люди хотят, чтобы это было так для согласованности.

У меня есть тесты, которые используют Spring Mock Mvc для тестирования методов контроллера. Я хотел бы проверить реакцию на ошибку при проверке ошибок, но когда я запускаю свои тесты, проверка bean-компонентов не выполняется. Однако он отлично работает, когда я создаю и развертываю приложение. Проверка также работает для тестов, если я помещаю аннотации проверки в класс, представляющий входящий запрос, и добавляю @Valid в аргумент метода контроллера, соответствующий запросу. Это просто не работает, когда это делается на уровне обслуживания.

Итак, мой вопрос в том, что это вообще должно работать с Mock Mvc, то есть должна ли проверка происходить нормально, когда контроллер вызывает метод службы? Или есть какая-то конфигурация Мне нужно, чтобы это работало во время тестов? Я сомневаюсь в этом, поскольку проверка работает, если я попытаюсь добавить его на уровень контроллера ...

Вот моя настройка тестового класса:

@ContextConfiguration(classes = {MyTestConfig.class})
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest {

private MockMvc mvc;

@Autowired
private WebApplicationContext wac;

@Before
public void setup() throws Exception {
    this.mvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}

Класс MyTestConfig просто имеет аннотацию @ EnableWeb Mvc , базовые пакеты для сканирования и некоторые несвязанные определения bean-компонентов.

Мой DTO имеет аннотацию @NotNull для свойства, служебный метод имеет аннотацию @Validated для класса и аннотацию @Valid для параметра метода, который является DTO.

С этими настройками, когда я делаю запрос в тесте к конечной точке контроллера, используя Mock Mvc instance mvc выше, проверка не выполняется для метода службы.

Так это вообще должно работать?

...