单元测试的良好模式形成了在Spring MVC中具有基于注释的验证的bean

Ash*_*yan 11 java unit-testing annotations spring-mvc bean-validation

对表单bean使用基于注释的验证时,对这些bean进行单元测试的最佳实践是什么,以确保为每个字段指定正确的验证注释?

例如,如果您有:

public class MyForm {
    @NotNull
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

验证@NotNull应用于它的最佳方法是什么?

一个显而易见的方法是创建一个验证器,在它上面抛出一个null并期望它失败.但在我看来,这不是最好的方法,因为你将测试@NotNull使用它的行为和实现,而不是信任框架.

理想情况下,我希望使用反射或实用程序,使我可以断言某个@NotNull(和任何其他)验证应用于给定字段,而不必发送未通过验证的各种值组合.

这样做有一种优雅的方式,还是我一般都在正确的轨道上?

giz*_*zmo 5

你应该考虑两件事:

不要测试您的第三方库/框架.

你应该依赖它们,它们应该已经由他们的维护者和周围的社区用户进行测试.你不测试它们,而是评估它们.确保它们符合您的需求并降低风险.

测试行为真的很重要!

在绝大多数应用程序中,实际UNIT测试几乎没有什么地方,因为业务逻辑要么很小,要么在应用程序的多个模块中广泛使用.因此,您应该考虑集成测试,其优先级高于单元测试.通过使用行为方法可以更容易地捕获这一点.

所以,要回答你的问题,你不应该尝试单独测试表单bean.它只是一个运输对象.您应该测试的是接收器如何对该形式做出反应,并检查正常情况和边缘情况.

  • 我同意不测试第三方库,但测试您的配置与测试行为一样重要. (2认同)

Erh*_*mir 4

您还可以使用验证器工厂为 JSR303 中注释的 Bean 编写单元测试。请参阅示例: http ://musingsofaprogrammingaddict.blogspot.com/2009/02/using-bean-validation-with-spring.html

  • 请添加链接文章的强制部分作为答案的一部分,以防止页面离线时丢失信息。 (2认同)