play-framework: тестване с фалшиво приложение

Опитвам се да тествам функционалност като тази:

@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()?


person Ahmed Aswani    schedule 07.03.2013    source източник


Отговори (1)


Да, това е прави същото

/**
 * 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 (и инициализация на fakeApplication в @Before).

Не харесвам помощния метод running(), защото не позволява хвърляне на изключения вътре в run().

person Community    schedule 10.03.2013