1

我需要进行一个 JUnit 测试来检查是否可以从数据库中删除某些内容。我正在使用带有内存数据库的 Play 2.1 框架。

我尝试了 assertNull(...),但失败了。然后我尝试了 assertNotNUll(...) 并且测试通过了,但我不确定这是最好的方法,或者它甚至可以确认删除。有没有更好的方法来检查项目是否已被删除?我应该查找对象并期待错误吗?

这是我的代码(我也有一些 @BeforeClass 和 @AfterClass 代码,但这与我的问题无关):

@Test
public void UserDelete(){
    // Test ID: 3
    // creating a new user
    User user = new User();
    user.id = (long) 4;
    user.facebookId = "0000004";
    user.email = "test4@gmail.com";
    user.name = "name4";
    user.save();

    // deleting the user
    user.delete();

    // checking deletion
    assertNotNull(user);
}
4

2 回答 2

0

您应该在数据库中插入新对象,检查是否已插入,删除它并检查它是否已删除。最明显的方法是用来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);
    }
}
于 2013-04-07T20:56:44.017 回答
0

一般来说,你通常必须做这样的事情。当然,这是一个粗略的示例,但它指出您应该使用一些持久性解决方案(例如 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);
}

在我看来,User不应该对它的生命周期负责,因为要求一个对象删除自己是没有意义的,因此你的问题有点自相矛盾。

稍后可以推广此解决方案,因此当您测试相同类型的行为时,您不必重新编写它。

于 2013-03-26T23:09:17.393 回答