首页 > 解决方案 > 如何为使用 IOwinContext 扩展方法的代码编写单元测试

问题描述

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

有没有人解决这个问题,或者您只是跳过此类课程的写作测试?- 子弹来了!我知道跳过测试不好,但我正处于放弃尝试的边缘。

标签: nunitidentityserver3

解决方案


推荐阅读