2010-10-20 125 views
2

以为我会尝试Spring Roo,所以我今天有很多新的有趣的问题。希望你们可以帮助我最新的一个。 Roo有能力为您的实体生成集成测试,但其中大多数都失败了。最常见的失败是某种形式的约束违规,如null被插入到非空字段中。我意识到我的实体没有什么能反映数据库中的这些限制。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; 

还是引起测试失败所以不知道袋鼠是聪明足以自动创建一个Term实体。

所以我的问题是,如果我可以修改这些生成的测试没有Roo覆盖重新启动它们?或者应该Roo能够设置非空值?

真的没有太多关于集成测试的文档,以及您可以使用生成的类在任何地方执行什么操作。我至少可以找到:)

谢谢

回答

1

我自己偶然发现了这个问题。虽然这个问题已经两年多了,但我希望问题的提出者现在也能找到解决方案。希望我的回答可以帮助其他人。

显然,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;