如何最好地对使用IServiceGateway调用其他内部服务的ServiceStack服务进行单元测试。

问题描述 投票:1回答:1

我一直按照这里的指南-- https:/docs.servicestack.nettesting。

我试图做单元测试而不是集成,只是为了减少嘲笑和其他复杂的程度。

我的一些服务通过推荐的IServiceGateway API调用我的一些其他服务,例如Gateway.Send(MyRequest)。

然而,当运行测试时,我得到了System.NotImplementedException:"无法解析服务'GetMyContentRequest'"。

我已经使用了容器.RegisterAutoWired(),它是处理这个请求的服务。

我不知道下一步该怎么走。我真的不想再重新开始设置一个集成测试模式。

unit-testing servicestack inversion-of-control
1个回答
3
投票

如果你试图将服务集成作为单元测试来执行,而不是将集成测试作为单元测试来执行,你很可能会不断地遇到问题,因为集成测试会在验证有效的状态下开始。

但是对于网关请求来说,它们的执行方式是使用了一个 IServiceGateway 您可以选择通过 实现GetServiceGateway() 在您的自定义 AppHost 或通过注册一个自定义实现的 IServiceGatewayFactoryIServiceGateway 在你的IOC中,这里是默认的实现。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.