У меня есть веб-приложение 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 выше, проверка не выполняется для метода службы.
Так это вообще должно работать?