Java 如何在JUnit(Play框架)中测试删除?
我需要进行JUnit测试,检查是否可以从数据库中删除某些内容。我正在使用Play2.1框架和内存数据库 我尝试了assertNull(…),但失败了。然后我尝试了assertNotNUll(…),测试通过了,但我不确定这是最好的方法,或者它甚至可以确认删除是否有更好的方法来检查项目是否已被删除?我是否应该查找该对象并期望出现错误 这是我的代码(我还有一些@BeforeClass和@AfterClass代码,但与我的问题无关):Java 如何在JUnit(Play框架)中测试删除?,java,frameworks,junit,playframework-2.1,Java,Frameworks,Junit,Playframework 2.1,我需要进行JUnit测试,检查是否可以从数据库中删除某些内容。我正在使用Play2.1框架和内存数据库 我尝试了assertNull(…),但失败了。然后我尝试了assertNotNUll(…),测试通过了,但我不确定这是最好的方法,或者它甚至可以确认删除是否有更好的方法来检查项目是否已被删除?我是否应该查找该对象并期望出现错误 这是我的代码(我还有一些@BeforeClass和@AfterClass代码,但与我的问题无关): 一般来说,你通常必须这样做。当然,这是一个粗糙的示例,但它指出您应该
一般来说,你通常必须这样做。当然,这是一个粗糙的示例,但它指出您应该使用一些持久性解决方案,如JPA来持久化域对象
@Test(expected = WhateverObjectNotFoundException.class)
public void removeUserTest(){
User u = UserFactory.createTestUser();
Long id = myEntityManager.persist(u);
assertNotNull(id);
myEntityManager.remove(u);
myEntityManager.findById(id);
}
在我看来,用户
不应该对其生命周期负责,因为要求对象删除自身是没有意义的,因此您的问题有些矛盾
这个解决方案以后可以推广,这样当您测试相同类型的行为时,就不必重新编写了。您应该在数据库中插入新对象,检查插入的对象,删除它,并检查它是否被删除。最明显的方法是使用
select count(*)
获取行数
public class ApplicationTest extends WithApplication {
@Before
public void setup() {
start(fakeApplication(inMemoryDatabase("default-test"), fakeGlobal()));
}
@Test
public void UserModify() {
// create user (User extends Model)
User user = new User();
user.setId(1);
user.setName("name1");
user.save();
int rowCount = Ebean.find(User.class).where().eq("id", 1).findRowCount();
assertEquals(1, rowCount);
user.delete();
rowCount = Ebean.find(User.class).where().eq("id", 1).findRowCount();
assertEquals(0, rowCount);
}
}
关于user.delete()方法包含的内容,您能给我们一个提示吗?如果我在调用user.delete()时理解正确,则在数据库中执行删除操作。这意味着用户不会受到影响。您应该做的是尝试在数据库中查询已删除的用户,并查看该用户是否已被删除。除非在delete()方法中更改实例“user”,否则它永远不会为null。实际上,播放文档建议使用活动记录样式的DB访问。
public class ApplicationTest extends WithApplication {
@Before
public void setup() {
start(fakeApplication(inMemoryDatabase("default-test"), fakeGlobal()));
}
@Test
public void UserModify() {
// create user (User extends Model)
User user = new User();
user.setId(1);
user.setName("name1");
user.save();
int rowCount = Ebean.find(User.class).where().eq("id", 1).findRowCount();
assertEquals(1, rowCount);
user.delete();
rowCount = Ebean.find(User.class).where().eq("id", 1).findRowCount();
assertEquals(0, rowCount);
}
}