1

我正在尝试对我的 Play 2.0 应用程序进行单元测试。

我有一个名为耐心的课程,下面是我的课程的简化版本:

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);

它会导致错误:

[错误] 测试模型。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) [error] at com.avaje.ebeaninternal.server.persist.dml.DmlBeanPersister.execute(DmlBeanPersister.java:86) [error] at com.avaje.ebeaninternal.server.persist .dml.DmlBeanPersister.update(DmlBeanPersister.java:66) [error] at com.avaje.ebeaninternal.server.persist.DefaultPersistExecute.executeUpdateBean(DefaultPersistExecute.java:91) [error] at com.avaje.ebeaninternal.server.core .PersistRequestBean。

这让我很头疼...请帮助...

4

1 回答 1

2

找到了解决方案。使用像 object.setVariable(newVariable) 这样的 getter 和 setter 来更新变量,而不是像 object.variable = newVariable 这样直接从对象调用。Play 将自动为所有实体生成 getter 和 setter(尽管在您的源代码中没有看到)。

于 2013-03-15T11:09:16.890 回答