代码之家  ›  专栏  ›  技术社区  ›  willcodejavaforfood

Roo集成测试-失败

  •  2
  • willcodejavaforfood  · 技术社区  · 14 年前

    我想我会尝试一下SpringRoo,所以今天我遇到了很多新的有趣问题。希望你们能帮我做最新的。Roo有能力为您的实体生成集成测试,但大多数测试对我来说都是失败的。最常见的失败是某种形式的约束冲突,如将空值插入非空值字段。我意识到我的实体上没有反映数据库中这些约束的内容。

    例如,属性实体与术语具有多对一关系

    //bi-directional many-to-one association to Term
        @ManyToOne
    @JoinColumn(name="TERM_ID",)
    private Term term;
    

    将其更改为:

    //bi-directional many-to-one association to Term
    @ManyToOne(optional=false)
    @JoinColumn(name="TERM_ID", nullable=false)
    private Term term;
    

    仍然会导致测试失败,因此不确定Roo是否足够聪明,可以自动创建术语实体。

    所以我的问题是,是否可以修改这些生成的测试,而不需要Roo在重新启动时覆盖它们?或者Roo应该能够设置非空值吗?

    关于集成测试以及您可以在任何地方使用生成的类做什么,实际上没有太多的文档。我至少能找到:)

    谢谢

    1 回复  |  直到 12 年前
        1
  •  1
  •   Jeroen Peeters    12 年前

    我自己也偶然发现了这个问题。虽然这个问题已经两年了,但我希望问题的发起者现在也能找到解决办法。希望我的回答能帮助其他人。

    显然,Roo使用JSR 303的验证而不是JPA约束来生成正确的集成测试。

    JPA对数据库施加约束,而不是对应用程序逻辑施加约束。为了让Roo生成正确的集成测试,您还必须指定与应用程序逻辑相同的约束。为了同时拥有这两个功能,只需使用JPA和JSR 303中的注释。

    ...
    import javax.validation.constraints.NotNull;
    ....
    
    @ManyToOne(optional=false)
    @JoinColumn(name="TERM_ID", nullable=false)
    @NotNull
    private Term term;