2017-08-24 11 views
0

我有一個測試這是檢驗一個期望的隱含CustomExecutionContext類:Scala - Play - 如何在Test中模擬導入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") 

想知道如何注入我的自定義執行上下文的模擬實例作爲隱式參數在我的Test類中使用?

回答

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 
    } 
    } 
} 
相關問題