有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Spring MockMvc测试期间验证服务方法上的bean

我有一个Spring5Web应用程序,它只在服务级别DTO上进行验证。也就是说,传入的请求不会在控制器中验证,但进入服务层方法的DTO会在该级别上验证。这是一个要求,因为这是在其他应用程序上执行的方式,其他人希望保持这样的一致性

我有一些测试使用SpringMockMVC来测试控制器方法。我想测试验证错误的错误响应,但是当我运行测试时,bean验证没有完成。不过,当我构建和部署应用程序时,它运行良好。如果我将验证注释放在表示传入请求的类上,并将@Valid添加到对应于请求的控制器方法参数中,那么验证也可以用于测试。当它在服务层上完成时,它就不工作了

所以我的问题是,这是否应该适用于MockMvc,也就是说,当控制器调用服务方法时,验证是否应该正常发生或者我是否需要一些配置,以便在测试期间工作?我对此表示怀疑,因为如果我尝试将其添加到控制器级别,验证工作就会起作用

以下是我的测试类设置:

@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类只有@EnableWebMvc注释、用于扫描的基本包和一些不相关的bean定义

我的DTO在属性上有@NotNull注释,服务方法在类上有@Validated注释,在方法参数(DTO)上有@Valid注释

使用这些设置,当我在测试中使用上面的MockMvc实例mvc向控制器端点发出请求时,不会对服务方法进行验证

那么这是不是应该有效呢


共 (0) 个答案