1

私は次のような機能をテストしようとしています:

@Test
    public void testAddTask() {
        FakeApplication fakeApplication = fakeApplication(inMemoryDatabase());
        start(fakeApplication);
        Task task=new Task();
        task.title="test Task";
        task.save();
        assertThat(Task.find.where().ilike("title", "task")).isNull();
        stop(fakeApplication);

    }

成功するのは間違っている

@Test
    public void testAddTask(){
        running(fakeApplication(inMemoryDatabase()), new Runnable() {
            public void run() {
                Task task=new Task();
                task.title="test Task";
                task.save();
                assertThat(Task.find.where().ilike("title", "task")).isNull();
            }
        });
    }

失敗し、それが私が期待していることです。

startfakeapplication`running(fakeApplication())と同じように動作するべきではありませんか?

4

1 に答える 1

2

はい、同じです

/**
 * Executes a block of code in a running application.
 */
public static synchronized void running(FakeApplication fakeApplication, final Runnable block) {
    try {
        start(fakeApplication);
        block.run();
    } finally {
        stop(fakeApplication);
    }
}

違いの原因は、他のテストを実行した後のクリーニングではない可能性があります。running()try..finally構文を持っているので、stop(fakeApplication);注釈付きのメソッドに入れることをお勧めします(そしてin@Afterの初期化)。fakeApplication@Before

running()内部で例外をスローできないため、ヘルパーメソッドは嫌いrun()です。

于 2013-03-10T18:44:50.663 に答える