0

私は暗黙のCustomExecutionContextを期待クラスをテストして、テストを持っている:Scala - Play - testのimport play.api.libs.concurrent.CustomExecutionContextを模倣し、それを暗黙的なパラメータとして使用する方法?

@Singleton 
class MyRepo @Inject() 
(appConfigService: AppConfigService) 
(implicit ec: RepositoryDispatcherContext) 

は今、私はこのクラスをテストし、テスト中にモックディスパッチャのコンテキストを注入する必要があります。最初は、標準のグローバル実行コンテキストをそのまま使用することを考えていました。

implicit executionContext = scala.concurrent.ExecutionContext.Implicits.global 

しかし、それは、インスタンスの別のタイプ見込んでテストが失敗した:

は、パラメータECの暗黙的な値を見つけることができませんでした: common.executor.RepositoryDispatcherContext

これは私のカスタムです実行コンテキスト:

import javax.inject.{Inject} 
import akka.actor.ActorSystem 
import play.api.libs.concurrent.CustomExecutionContext 

class RepositoryDispatcherContext @Inject()(actorSystem: ActorSystem) extends CustomExecutionContext(actorSystem, "repository.dispatcher") 

私のカスタム実行コンテキストの疑似インスタンスを、テストクラスの暗黙的なパラメータとして使用するために注入する方法が不思議でしたか?

答えて

1

カスタムディスパッチャのサブクラスを作成し、必要なメソッドオーバーライドすることができます。

import org.specs2.mutable.Specification 

import akka.actor.ActorSystem 
import scala.concurrent.ExecutionContext 

class MySomethingSpec extends Specification with Mockito { 

    "MySomething" should {  

    "mock repository dispatcher itself" in { 
     class MyMockedRepositoryDispatcher(executionContext: ExecutionContext) extends RepositoryDispatcherContext(ActorSystem()) { 
     override def execute(command: Runnable) = executionContext.execute(command) 
     override def reportFailure(cause: Throwable) = executionContext.reportFailure(cause) 
     } 

     val executionContext: ExecutionContext = ??? // whatever you need 
     val repositoryDispatcher: RepositoryDispatcherContext = new MyMockedRepositoryDispatcher(executionContext) 

     // do what you need 
     // assertions 
    } 
    } 
} 
関連する問題