Передача контента akka в класс для тестирования - PullRequest
0 голосов
/ 24 мая 2019

Я пытался написать примеры модульных тестов для класса, который неявно принимает контекст субъекта в качестве своего параметра.Как я могу передать это?Насколько я знаю, это доступно только внутри актера.Есть ли способ, я мог бы передать его в качестве аргумента для модульного тестирования?

class HttpAuthenticationTest extends TestKit(ActorSystem("Test") with Matchers with FlatSpecLike with BeforeAndAfterAll with MockitoSugar
{
def tearDown() : Unit =
{
    TestKit.shutdownActorSystem(system)
}

val smallRoute : server.Route =
    get {
        pathSingleSlash {
            complete {
                "..."
            }
        }
    }

implicit val m_materializer : ActorMaterializer = ActorMaterializer()
val responseActorTestProbe = TestProbe()
val publisher : ActorRef = m_responseActorTestProbe.ref

val policy = mock[Policy]

val http_authentication = new HTTPAuthentication()
it should "check the generate and validate functions" in
{
    http_authentication.check(m_publisher, policy, smallRoute, DiscoveryServiceAPIVersion)
}
}   

Это то, что я пробовал до сих пор. Вот фрагмент кода:

abstract class Policy(val key : String)

class Authentication(implicit context : ActorContext)
{
implicit val m_executionContext = context.system.dispatchers.lookup("akka.actor.deployment.authentication-dispatcher")
val HEADER = "header"
val BASIC = HttpChallenge("Basic", None)

def check(publisher : ActorRef, api : Policy, route : Route, enum : Enumeration) : Route =
{
    check1(Some(publisher), api, route , enum)
}

private def check1(publisherOption : Option[ActorRef], api : Policy, route : Route , enum : Enumeration) : Route =
{
  ...
}

private def check2(publisherOption : Option[ActorRef], route : Route , enum : Enumeration) : Route =
{
    optionalHeaderValueByName(HEADER)
    {
        apiVersionOption =>
        {
            if(some condition .....)
            {
                route
            }
            else
            {
                extractRequest
                {
                    ...
                }
            }
        }
    }
}

def user(api : Policy, clientIDPrefixOptional : Option[String] = None)(credentialsOptional : Option[HttpCredentials]) : Future[AuthenticationResult[String]] =
{
    ...
}
} `

Методыдля которого я пытаюсь написать тестовые случаи являются проверкой, проверкой 1 и проверкой2.Я получаю контекст актера не определено.

...