【问题标题】:How to test deletion in JUnit (Play Framework)?如何在 JUnit (Play Framework) 中测试删除?
【发布时间】:2013-03-26 14:57:11
【问题描述】:

我需要做一个 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);
}

【问题讨论】:

  • 你能给我们一个关于 user.delete() 方法包含什么的提示吗?如果我在您调用 user.delete() 时理解正确,您将在数据库中执行删除。这意味着用户不受影响。您应该做的是尝试查询已删除用户的数据库并查看它已被删除。除非您在 delete() 方法中更改实例“用户”,否则它永远不会为空。

标签: java frameworks junit playframework-2.1


【解决方案1】:

一般来说,你通常必须做这样的事情。当然这是一个粗略的例子,但它指出你应该使用一些持久性解决方案,比如 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 不应该对其生命周期负责,因为要求对象删除自身是没有意义的,因此您的问题有点自相矛盾。

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

【讨论】:

  • 播放文档,实际上,建议使用 Active Record 样式的 DB 访问。
【解决方案2】:

您应该在数据库中插入新对象,检查是否已插入,删除它并检查它是否已删除。最明显的方法是使用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);
    }
}

【讨论】:

    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2017-02-21
    • 2017-08-25
    相关资源
    最近更新 更多