我正在尝试在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?
现在我的第二个断言失败了,因为数据库保留了先前插入的记录。
答案 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()
)。