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);带有注释的方法@After(以及fakeApplicationin 的初始化@Before)。

我不喜欢running()辅助方法,因为它不允许在run().

于 2013-03-10T18:44:50.663 回答