玩! + Siena + GAE + JUnit

时间:2010-07-21 12:46:41

标签: java google-app-engine junit playframework siena

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

我已正确配置项目,可以将应用程序部署到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()来清除测试db?

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

2 个答案:

答案 0 :(得分:2)

您需要对每个表执行删除操作。 E.g:

Model.all(User.class).delete();

答案 1 :(得分:2)

我不知道它是否已经迟到但我已经为Siena添加了一些Fixture支持(使用play 1.1,gae 1.4,siena 1.3,crudsiena 1.2测试)。

它支持deleteAll()load()

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

我很新玩和siena(1周)因此可能有更好的方法(特别是deleteAll())。