2017-02-01 10 views
0

Я использую playframework 2.2.6 scala.MockServer in org.specs2 тесты

Я хочу написать интеграционные тесты для своего приложения. Но мое приложение запрашивает некоторые услуги по http, и я хочу издеваться над ним с помощью mockServer. Но я не знаю, когда начинать и останавливать mockServer вызывают тесты используют фьючерсы

@RunWith(classOf[JUnitRunner]) 
class AppTest extends Specification with Around { 

    def around[T](t: => T)(implicit e: AsResult[T]): Result = { 

     val port = 9001 

     val server = new MockServer() 

     server.start(port, null) 

     val mockServerClient = new MockServerClient("127.0.0.1", port) 

     // mockServerClient rules 

     val result = AsResult.effectively(t) 

     server.stop() 

     result 
    } 

    "Some test" should { 

     "some case" in new WithApplication { 

      val request: Future[SimpleResult] = route(...).get 

      status(request) must equalTo(OK) 

      contentAsString(request) must contain(...) 
     } 

     "some other case" in new WithApplication { 
      // 
     } 
    } 
} 

С помощью этого кода я имею java.net.ConnectException: Соединение отклонено: /127.0.0.1:9001. И я не могу сделать это без server.stop, потому что сервер должен запускаться в разных тестах.

+0

Вы можете попробовать с Вместо символа «AroundEach»? Это признак, который нужно использовать, когда вы хотите выполнить поведение в каждом примере. Затем, если вы хотите проверить фьючерсы, вы обычно можете использовать 'содержать (...). Await' при условии, что у вас есть неявное' ExecutionEnv' в области видимости: 'class AppTest (implicit ee: ExecutionEnv) расширяет спецификацию с помощью AroundEach'. Я превращу это в ответ, если он работает нормально для вас. – Eric

ответ

0

Я нашел решение, я посмотрел исходный код WithApplication (он проходит вокруг) и написал абстрактный класс WithMockServer:

abstract class WithMockServer extends WithApplication { 

    override def around[T: AsResult](t: => T): Result = { 

    Helpers.running(app) { 

     val port = Play.application.configuration.getInt("service.port").getOrElse(9001) 
     val server = new MockServer(port) 

     val mockServerClient = new MockServerClient("127.0.0.1", port) 

     // mockServer rules 

     val result = AsResult.effectively(t) 
     server.stop() 
     result 
    } 
    } 
} 

И в каждом из тестов я заменил in new WithApplication с in new WithMockServer

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

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