0

テストでは、例外をキャッチしようとします。

ここでは、ソフトウェアにタイトルが付いていないことを期待しています。したがって、このエンティティを保存しているときに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)

それが機能しない場合は?

4

2 に答える 2

1

javax.persistence.Columnデータベース列の詳細を指定するために使用されます。null許容属性は通常、テーブル定義を生成するときにのみ使用され、実行時に検証に使用されることはありません。

javax.validation.constraints.NotNull実行時に、データを永続化する前にデータを検証するために使用されます。

そのため、を使用するとPersistenceExceptionが発生し@NotNullます。そして、あなたが使用するときの例外はありません@Column(nullable = false)

于 2012-12-27T02:09:41.277 に答える
0

私は理解しました:

ソフトウェアインスタンスの構築中にミスがありました。したがって、それは機能し、例外をスローします。ビルダーインスタンスを使用する必要がありました-1つのビルダーから1つのテスト。その後、すべてが期待どおりに機能します。

@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) {}
}
于 2012-12-27T22:03:19.730 に答える