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