mixinのテストを、Playアプリケーションとは別のスレッドで実行されるPlayアプリケーションに書き込む際に問題があります。私は幸運なしでWithApplication.provideApplication
メソッドを上書きしようとしました。 inheriting conflicting methods
エラーが発生します。 (実際のアプリ「MyRunnableSystemWrapper」の1つ、私ののうちの1つは、「MyMockedSystemWrapper」と呼ばれるの偽のミックスインです)。カスタム特性を拡張するPlayアプリケーションをテストする方法
execute(system)
私のシステムは、他の場所でテストされ、サイドファクト(ネットワーク接続されたサービスに接続しているため、このようなものが利用できないときには失敗します)を実行します。 。。
class Application extends Controller with MyRunnableSystemWrapper {
val pool: ExecutorService = Executors.newFixedThreadPool(1)
val system = new MyRunnableSystem() //system is abstract in MRSW ^^^ above
pool.execute(system)
def index = Action {
OK("HI")
}
}
マイ:側が影響し、DB /ネットワーク呼び出しはしかし、私は「WithApplication」テストに私のアプリのTHIS嘲笑バージョンを与える方法がわからないうち嘲笑
明確にするためのコードを削減している必要はありませ試験:
class MyAppTest(implicit ee: ExecutionEnv) extends Specification {
abstract class WithMyMockApp extends WithApplication {
def provideApplication = new controllers.Application with MyMockedSystemWrapper // This imports MyRunnableSystemWrapper
}
"Sending a GET request" should {
"Respond with OK" in new WithMyMockApp {
val response = route(app, FakeRequest(GET, "/")).get
status(response) mustEqual OK
}
}
}
Runnableを正しい場所で実行しておらず、このテストを容易にするために別の場所に呼び出す必要がある場合は、教えてください。
また、私のシステムの自己型リファレンスを作成することを考えました: 'class Application extends controller {mysys:MySystem => ...}'しかし、私はPlayに特定の依存関係。演奏は自動的にこのアプリケーションコントローラを見つけ出して起動しますので、どのようにミックスインをプロとテストに入れますか? – dlite922
PlayはMySystemで起動する方法がわからないので、 'com.google.inject.ProvisionException:Unable to provision'エラーが発生します。 – dlite922