1

Play2.0アプリケーションで単体テストを実行しようとしています。

私にはpatientというクラスがあります。以下は私のクラスの簡略版です。

public class Patient extends Model{
    @Id
    public Long id;

    @Required
    public String gender;

    public Date updatedOn;

    public void update(Object o){
        this.updatedOn = new Date();
        super.update(0);
    }
}

ブラウザでPatientを更新すると完全に正常に機能しますが、単体テストを作成して実行すると

    Patient patient = new Patient();        
    patient.gender = "M"
    patient.save();
    assertThat(patient.id).isNotNull();
    Long id = patient.id;

    patient = Patient.find.byId(id);
    assertThat(patient).isNotNull();
    assertThat(patient.gender).isEqualTo("M");

    patient.gender = "F";
    assertThat(patient.gender).isEqualTo("F");

    patient.update(patient.id);

エラーが発生します:

[エラー]テストmodels.PatientModelTest.updatePatientが失敗しました:データが変更されました。更新された[0]行sql[更新された患者セットupdated_on=?ここでid=?およびdate_of_birth=?と性別=?およびupdated_on=?] bind [null] [error] at com.avaje.ebeaninternal.server.persist.dml.DmlHandler.checkRowCount(DmlHandler.java:103)[error] at com.avaje.ebeaninternal.server.persist.dml .UpdateHandler.execute(UpdateHandler.java:88)[エラー] at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:86)[エラー] at com.avaje.ebeaninternal.server.persist .dml.DmlBeanPersister.update(DmlBeanPersister.java:66)[エラー] at com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeUpdateBean(DefaultPersistExecute.java:91)[エラー] at com.avaje.ebeaninternal.server.core .PersistRequestBean。

これは私に本当の頭痛を与えています...助けてください...

4

1 に答える 1

2

解決策を見つけました。object.variable = newVariableのようなオブジェクトから直接呼び出すのではなく、object.setVariable(newVariable)のようなgetterおよびsetterを使用して変数を更新します。Playは、すべてのエンティティのゲッターとセッターを自動的に生成します(ただし、ソースコードには表示されません)。

于 2013-03-15T11:09:16.890 に答える