2

Я использую Play Framework и использую Java в качестве языка выбора. У меня есть контроллер, который делает вызов REST внешней службе. Я намерен высмеять внешнюю службу, чтобы я мог проверить функциональность моего контроллера. Для этого я создал свои тестовые примеры, как показано ниже (образец). Я внедряю сервер в свой тест, чтобы высмеять внешнюю службу.Контрольные контроллеры в Play Framework

public class SomeControllerTest extends WithApplication { 

private static Server SERVER; 

@Override 
protected Application provideApplication() { 
    final Module testModule = new AbstractModule() { 
     @Override 
     public void configure() { 
      bind(AppDao.class).to(MockAppDaoImpl.class); 
     } 
    }; 
    return new GuiceApplicationBuilder().in(Environment.simple()).overrides(testModule).build(); 
} 

@BeforeClass 
public static void setup() { 
    Router router = new RoutingDsl() 
      .POST("/api/users") 
      .routeTo(() -> created()) 
      .build(); 
    SERVER = Server.forRouter(router, 33373); 
    PORT = SERVER.httpPort(); 
} 

@AfterClass 
public static void tearDown() { 
    SERVER.stop(); 
} 

@Test 
public void testCreateUser() { 
    ObjectNode obj = Json.newObject(); 
    obj.put("name", "John Doe"); 
    obj.put("email", "[email protected]"); 
    Http.RequestBuilder request = new Http.RequestBuilder() 
      .method(POST) 
      .bodyJson(obj) 
      .uri("/some/url/here"); 
    Result result = route(request); 
    assertEquals(ERR_MSG_STATUS_CODE, CREATED, result.status()); 
    assertEquals(ERR_MSG_CONTENT_TYPE, Http.MimeTypes.JSON, result.contentType().get()); 
} 

Я ожидаю, что когда я запускаю тест шутливая сервер будет работать и на основе тестовой конфигурации моего приложения, мой контроллер сделает вызов на макет сервера, который будет возвращать 201 и мой тест будет проходить , Но этого не происходит, потому что как только метод setup() будет завершен, макет сервера будет убит, и мой контроллер не сможет позвонить ему.

Что я здесь делаю неправильно?

+0

Возможно, вы можете использовать 'Helpers.testServer();' для получения сервера, а затем 'Helpers.start (server);' для запуска. – Kris

+0

@ Kris Как я могу предоставить Маршрутизатору тестовый сервер, созданный помощниками? – Rishabh

+0

Простите, не пробовал с помощью маршрутизатора. – Kris

ответ

3

Тестирование контроллера должно быть сделано, а по наследству от WithApplication

public class TestController extends WithApplication { 
    @Test 
    public void testSomething() { 
     Helpers.running(Helpers.fakeApplication(),() -> { 
      // put test stuff 
      // put asserts 
     }); 
    } 

}

Для того чтобы проверить метод контроллера использовать Helpers.fakeRequest и обратной маршрутизации. Внешнюю службу можно просто высмеять с помощью mockito или других насмешливых фреймов, которые вам нравятся.

Вы можете найти here несколько примеров.

+0

Спасибо за ваш вклад и за ссылку. Мне придется попробовать. Как только я нахожу, что он работает, как ожидается, я буду отмечать его как правильный ответ. – Rishabh

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