3

我正在尝试在 Play 上启动和运行一些基本的单元测试!使用带有 GAE 作为预期部署目标的 Siena 持久性库的框架。

我已正确配置项目并且可以将应用程序部署到 GAE。我创建了一个基本的域对象:

public class User extends Model {

    @Id(Generator.AUTO_INCREMENT)
    public Long id;

    @Column("first_name")
    public String firstName;

    @Column("last_name")
    public String lastName;

    @Column("email")
    public String email;

    public User(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }

    public static Query<User> all() {
        return Model.all(User.class);
    }

}

和一个基本的单元测试:

public class BasicTest extends UnitTest {

    @Before
    public void setup() {
        Fixtures.deleteAll();
    }


    @Test
    public void canCreateUser() {
        new User("Jason","Miesionczek","atmospherian@gmail.com").insert();

        User user = User.all().fetch().get(0);

        assertNotNull(user);
        assertEquals(1,User.all().count());
    }

}

我在 Play 中明白这一点!1.0.3,尚不存在对 Siena 的 Fixtures 支持,这应该在 1.1 中修复,但与此同时,我应该使用什么来代替 Fixtures.deleteAll() 在每次测试之前清除测试数据库?

现在我的第二个断言失败了,因为数据库保留了以前插入的记录。

4

2 回答 2

2

您需要对每个表进行删除。例如:

Model.all(User.class).delete();
于 2010-08-19T18:21:16.060 回答
2

我不知道是不是已经太晚了,但我已经为 Siena 添加了一些 Fixture 支持(在 play 1.1、gae 1.4、siena 1.3、crudsiena 1.2 上进行了测试)。

它支持deleteAll()load()

SienaFixture.java http://pastie.org/1367878

我很新玩和锡耶纳(1周),所以可能有更好的方法(尤其是deleteAll())。

于 2010-12-11T14:44:32.833 回答