servicestack,inversion-of-control,Unit Testing,servicestack,Inversion Of Control" /> servicestack,inversion-of-control,Unit Testing,servicestack,Inversion Of Control" />

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

Unit testing 如何最好地对使用IServiceGateway调用其他内部服务的ServiceStack服务进行单元测试,unit-testing,servicestack,inversion-of-control,Unit Testing,servicestack,Inversion Of Control,我一直遵循这里的指导原则- 我试图做单元测试而不是集成,只是为了降低模拟和其他复杂性 我的一些服务通过推荐的IServiceGateway API调用我的一些其他服务,例如Gateway.SendMyRequest 但是,当运行测试时,我得到System.NotImplementedException:“无法解析服务”GetMyContentRequest 我使用了container.RegisterAutoWired,这是处理此请求的服务 我不知道下一步该去哪里。我真的不想再次开始设置集成测试

我一直遵循这里的指导原则-

我试图做单元测试而不是集成,只是为了降低模拟和其他复杂性

我的一些服务通过推荐的IServiceGateway API调用我的一些其他服务,例如Gateway.SendMyRequest

但是,当运行测试时,我得到System.NotImplementedException:“无法解析服务”GetMyContentRequest

我使用了container.RegisterAutoWired,这是处理此请求的服务


我不知道下一步该去哪里。我真的不想再次开始设置集成测试模式。

如果您尝试以单元测试的形式执行服务集成,而不是以验证有效状态启动的集成测试,则可能会不断遇到问题

但对于网关请求,它们是使用IServiceGateway执行的,您可以选择在自定义AppHost中使用自定义实现覆盖该IServiceGateway,或者在IOC中注册IServiceGateway工厂或IServiceGateway,以下是默认实现:

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);
}

如果您试图以单元测试的形式执行服务集成,而不是以验证有效状态启动的集成测试,那么您可能会不断遇到问题

但对于网关请求,它们是使用IServiceGateway执行的,您可以选择在自定义AppHost中使用自定义实现覆盖该IServiceGateway,或者在IOC中注册IServiceGateway工厂或IServiceGateway,以下是默认实现:

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);
}

是的,我刚刚意识到这可能会导致电话螺旋上升。是的,我刚刚意识到这可能会导致电话螺旋上升。