Nunit 如何为使用IOwinContext扩展方法的代码编写单元测试

Nunit 如何为使用IOwinContext扩展方法的代码编写单元测试,nunit,identityserver3,Nunit,Identityserver3,IdentityServer3有很多扩展方法,这些方法很好。当尝试单元测试包含以下IOwinContext扩展方法调用的代码时,会出现问题,如:GetIdentityServerHost()、GetIdentityServerBasePath()等 即使在模拟HttpContext并能够获得OwinContext实例之后,我仍然会得到错误,因为一切都是模拟的,所以内部依赖项(例如基于Autofac的)没有得到解决 以下是单元测试错误: System.ArgumentNullException :

IdentityServer3有很多扩展方法,这些方法很好。当尝试单元测试包含以下IOwinContext扩展方法调用的代码时,会出现问题,如:GetIdentityServerHost()、GetIdentityServerBasePath()等

即使在模拟HttpContext并能够获得OwinContext实例之后,我仍然会得到错误,因为一切都是模拟的,所以内部依赖项(例如基于Autofac的)没有得到解决

以下是单元测试错误:

System.ArgumentNullException : Value cannot be null.
Parameter name: context
   at Autofac.ResolutionExtensions.ResolveOptionalService(IComponentContext context, Service service, IEnumerable'1 parameters) in c:\ballen\github\identity\IdSrv3\IdentityServer3\source\Core\Internal\AntiXssLibrary\UnicodeCharacterEncoder.cs:line 0
   at IdentityServer3.Core.Extensions.InternalOwinExtensions.ResolveDependency(IOwinContext context, Type type) in c:\ballen\github\identity\IdSrv3\IdentityServer3\source\Core\Extensions\InternalOwinExtensions.cs:line 78
   at IdentityServer3.Core.Extensions.InternalOwinExtensions.ResolveDependency[T](IOwinContext context) in c:\ballen\github\identity\IdSrv3\IdentityServer3\source\Core\Extensions\InternalOwinExtensions.cs:line 70
   at IdentityServer3.Core.Extensions.OwinEnvironmentExtensions.GetIdentityServerIssuerUri(IDictionary'2 env) in c:\ballen\github\identity\IdSrv3\IdentityServer3\source\Core\Extensions\OwinEnvironmentExtensions.cs:line 672

有人绕过了这个问题吗,或者你跳过了这类课程的写作测试?-子弹来了!我知道跳过测试是不好的,但我即将放弃尝试。

扩展方法使模拟变得棘手,因为在设置或验证对模拟的调用时,必须模拟依赖项上实际调用的内容。根据您使用的模拟框架(没有标签给我线索),可能有一些方法可以确定实际调用是什么;或者您可以查看扩展方法的定义。我在主机上使用Ninject,但identityserver3在内部使用Autofac。我无法控制它。这两个都不是一个嘲弄的框架。例如,如果你正在使用我可能会指给你这样的东西。。。是的,我使用NUnitt的Moq链接是关于WebAPI的。我的是MVC解决方案,所以我没有设置文本选项。然而,我的文本不是空的,所以这不是我的问题。我的问题是,我的代码在外部库中调用owin扩展方法。该方法内部有一个autofac依赖项,这显然是未初始化的,因为我不知道如何将依赖项注入单元测试中的http管道。