【问题标题】:Spring Rest Controller skip method argument validation in unit testSpring Rest Controller在单元测试中跳过方法参数验证
【发布时间】: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


【解决方案1】:

我认为您需要将 @WebAppConfiguration 注释添加到您的测试类。

【讨论】:

  • 我添加了@webappconfiguration,但结果相同@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @ContextConfiguration(loader = AnnotationConfigContextLoader.class) I am quite new to spring boot. So I might have made newbie mistakes.
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多