1

データベースから何かを削除できるかどうかを確認する JUnit テストを作成する必要があります。インメモリ データベースで Play 2.1 Framework を使用しています。

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

一般に、通常はこのようなことをしなければなりません。もちろん、これは大まかな例ですが、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 に答える
0

DBに新しいオブジェクトを挿入し、挿入されたことを確認し、削除して、削除されたことを確認する必要があります。最も明白な方法は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 に答える