2016-10-04 1 views
1

Я пытаюсь писать тесты для методов класса контроллера, который содержит инъекционные зависимостейPlay: тест-блока для метода класса контроллера ж/инъекции

Это моя реализация тестового класса:

public class MyTestClass { 
    private static Application app; 

    @BeforeClass 
    public static void beforeTest() { 
     app = Helpers.fakeApplication(Helpers.inMemoryDatabase()); 
     Helpers.start(app); 

     // ..... 
    } 

    @AfterClass 
    public static void afterTest() { 
     Helpers.stop(app); 
    } 

    @Test 
    public void testSomething() { 

     // ..... 
     app.injector().instanceOf(MyController.class).processSomething(); 

     // Some assertions here.. 
    } 

} 

MyController.processSomething() метод содержит некоторую реализацию, которая включает использование введенного объекта FormFactory.

И когда я пытаюсь запустить, я получаю null значение

[error] Test MyTestClass.testSomething failed: null, took 0.137 sec 
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0 
[error] Failed tests: 
[error]   MyTestClass 
[error] (test:test) sbt.TestsFailedException: Tests unsuccessful 


Вопрос: Как я могу убедиться, контроллер я тестирование может получить свои инъекции?

ответ

1

Мое предложение состоит в том, чтобы вывести тестовый класс из WithApplication вместо того, чтобы вручную обрабатывать жизненный цикл приложения. Это будет выглядеть примерно так:

public class MyTestClass extends WithApplication { 
    @Test 
    public void testSomething() { 
     Helpers.running(Helpers.fakeApplication(),() -> { 
      // *whatever mocking* 
      RequestBuilder mockActionRequest = Helpers.fakeRequest(
             controllers.routes.MyController.processSomething()); 
      Result result = Helpers.route(mockActionRequest); 
      // *whatever assertions* 
     }); 
    } 
} 

Вы также можете выбрать here.

 Смежные вопросы

  • Нет связанных вопросов^_^