Как лучше выполнить модульное тестирование службы ServiceStack, которая использует IServiceGateway для вызова других внутренних служб - PullRequest
1 голос
/ 01 мая 2020

Я следовал рекомендациям здесь - https://docs.servicestack.net/testing

Я пытаюсь проводить модульное тестирование, а не интеграцию, просто чтобы снизить уровень насмешек и других сложностей. .

Некоторые из моих служб вызывают некоторые другие мои службы через рекомендуемый API IServiceGateway, например, Gateway.Send (MyRequest).

Однако при выполнении тестов я получаю System.NotImplementedException: 'Не удалось разрешить службу' GetMyContentRequest ''.

Я использовал container.RegisterAutoWired (), который является службой, обрабатывающей этот запрос.

Я не уверен, куда go следующий. Я действительно не хочу начинать заново настройку шаблона интеграционного теста.

1 Ответ

3 голосов
/ 01 мая 2020

Вы, вероятно, будете постоянно сталкиваться с проблемами, если попытаетесь выполнить интеграцию сервисов в виде модульных тестов вместо тестов интеграции, которые начнутся в проверенном действительном состоянии.

Но для запросов шлюза они выполняется с использованием IServiceGateway, который вы можете переопределить с помощью реализации GetServiceGateway () в вашей пользовательской AppHost с пользовательской реализацией или путем регистрации IServiceGatewayFactory или IServiceGateway в вашем IO C, вот реализация по умолчанию:

public virtual IServiceGateway GetServiceGateway(IRequest req)
{
    if (req == null)
        throw new ArgumentNullException(nameof(req));

    var factory = Container.TryResolve<IServiceGatewayFactory>();
    return factory != null ? factory.GetServiceGateway(req) 
        : Container.TryResolve<IServiceGateway>()
        ?? new InProcessServiceGateway(req);
}
...