【发布时间】:2016-03-21 03:48:21
【问题描述】:
我已经配置 Spring 来验证控制器方法参数,方法是在应用程序配置中添加 MethodValidationPostProcessor bean,并在控制器上添加 @validated 注释。
public Entity getEntity(@MyConstraint @RequestParam int limit)
MyConstraint 验证在应用程序中应用,但在运行单元测试时,不会触发验证。
测试类如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@ContextConfiguration(loader = AnnotationConfigContextLoader.class)
public class ControllerTest {
@Before
public void setup()
{
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ControllerExceptionHandler())
.build();
}
@Test
public void testCase() throws Exception
{
mockMvc.perform(get("locale?limit=-1")).andExpect(status().isBadRequest());
}
知道我的测试有什么问题吗? 谢谢。
【问题讨论】:
-
我猜上下文扫描不是由单元测试完成的,而是针对应用程序的。
-
你是如何实际测试这个的?直接调用还是通过 MockMVC?
-
@M. Denium 我正在通过 MockMVC 进行测试:mockMvc.perform(get("url?value=-1")).andExpect(status().isBadRequest());
-
请添加完整的测试用例,而不仅仅是标题。
-
@M. Denium 这是完整的测试用例。我删除了一些不重要的测试用例:@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration @ContextConfiguration(loader = AnnotationConfigContextLoader.class) public class TranslationLocaleControllerTest { @Test public void testGetLocalesNonHateoasNegativeLimit() throws Exception { mockMvc.perform(get( "locale?limit=-1")).andExpect(status().isBadRequest()); }
标签: spring-mvc spring-boot spring-restcontroller