在测试中我尝试捕获异常:
在这里,我期待软件没有标题 - 所以我希望在保存这个实体时会抛出PersistenceException。
@Test
public void saveWithoutTitle() {
Software software = ...
try {
software.save();
fail("software.title should not be null");
} catch (PersistenceException ex) {}
}
我的测试失败(即异常永远不会发生)
我的软件实体类 @Column(nullable = false!):
@Entity
public class Software extends Model {
@Column(nullable = false)
public String title;
我做错了什么?
-
我已经找到了解决方法如何修复它:
import javax.validation.constraints.NotNull;
@Entity
public class Software extends Model {
@NotNull
String title;
但同样,有什么意义:
@Column(nullable = false)
如果它不起作用?
答案 0 :(得分:1)
javax.persistence.Column
用于指定数据库列的详细信息。 nullable属性通常仅在生成表定义时使用,而不是在运行时用于验证。
javax.validation.constraints.NotNull
在运行时用于在持久化之前验证数据。
这就是使用@NotNull
时收到PersistenceException的原因。使用@Column(nullable = false)
答案 1 :(得分:0)
我想通了:
我在构建Software实例时遇到了错误。因此,它可以工作并抛出异常。我应该使用构建器实例 - 一个构建器到一个测试。然后一切都像预期一样。
@Test
public void saveWithoutTitle() {
SoftwareTemplateBuilder builder = new SoftwareTemplateBuilder();
Software software = builder.template1().withTitle(null).create();
try {
software.save();
fail("software.title should not be null");
} catch (ConstraintViolationException ex) {}
}