Можно ли запустить несколько экземпляров PlayS Testverer, созданных из разных модулей, для функционального тестирования? - PullRequest
0 голосов
/ 28 апреля 2020

Я использую Play для микросервисов в многопроектной настройке SBT. Моя идея состояла в том, чтобы создать отдельный модуль исключительно для функционального тестирования, который будет depend во всех приложениях Play и запускать экземпляры Play's TestServer, и сервисы будут взаимодействовать через вызов своих конечных точек REST. Это, похоже, не работает, потому что, хотя экземпляры TestServer создаются в их ретроспективных модулях, оба экземпляра указывают на приложение одного типа. Чтобы проиллюстрировать это:

Итак, у вас есть мультипроект SBT. 2 модуля являются приложениями Play, а третий предназначен для запуска функциональных тестов с обоими приложениями.

sbt_multi_project/
└── app_one/
    └── test/
        └── FakeAppOneServer.java
└── app_two/
    └── test/
        └── FakeAppTwoServer.java
└── func_test_module/
    └── test/
        └── RunTests.java

Например, эти поддельные серверы реализованы следующим образом:

public class FakeAppOneServer {   
    public static TestServer INSTANCE = new TestServer(9001, fakeApplication());   
}

func_test_module зависит от 2 приложений. В build.sbt:

lazy val `func_test_module` = (project in file("func_test_module"))
  .settings(
     // ...
  )
  .dependsOn(
    `app_one` % "test->test",
    `app_two` % "test->test"
  )

И в RunTests.java вы работаете с такими подделками, например:

@Test
public void someTests() {
    FakeAppOneServer.INSTANCE.doYourThing();
    FakeAppTwoServer.INSTANCE.doAnotherThing();
}

Проблема в том, что оба FakeAppOneServer & FakeAppTwoServer указать на то же приложение. Это разные экземпляры, работающие на разных портах, но это одна и та же реализация, т. Е. Вызов / на обоих приведет к экземпляру AppOne, например.

Спасибо за любые предложения!

...