Название в значительной степени говорит само за себя. Я хотел бы настроить традиционный тест JUnit, чтобы имитировать зависимости контроллера и запускать тесты против действий.
Я обнаружил, что могу достичь своей цели следующим образом:
public class AccountsControllerTest {
private controllers.Accounts accountsController;
@Test
public void test() {
running(fakeApplication(), new Runnable() {
public void run() {
accountsController = new controllers.Accounts();
accountsController.setAccountsWorkflow(mock(workflow.Accounts.class));
}
});
}
}
Очевидная проблема здесь заключается в том, что я создаю экземпляр своего тестируемого класса и внедряю фиктивные зависимости из самого тестового метода, когда я должен делать это в метод setup()
. Кажется, что метод setup()
бесполезен, если я собираюсь тестировать свой контроллер традиционным способом.
Конечно, я могу протестировать контроллеры так, как рекомендует Play, но мое приложение зависит от внешнего веб-сервиса SOAP, поэтому мне нужны модульные тесты, чтобы показать, что наш код работает, когда их серверы не работают.
Итак, как лучше всего провести модульное тестирование контроллера Play с помощью макетов, используя при этом преимущества методов setup()
и teardown()
?
Редактировать
Я понимаю, что здесь я предполагаю некоторые знания, поэтому для тех, кто не знает, создание контроллера в модульном тесте должно быть заключено в функцию running()
или Play! выдаст исключение времени выполнения, говорящее, что приложение не запущено.