因此,我为 ApiController 构建了单元测试,其中一个仅在 CI 管道中的服务器上失败,但除外System.InvalidOperationException : HttpControllerContext.Configuration must not be null.
结构如下所示:
public IHttpActionResult MyControllerMethod()
{
if(this.SomeThings()) // uses this.IService and this.IService2
return this.UnAuthorized();
DoOtherStuff();
return this.Ok();
}
在我的测试中,我模拟 IService 和 IService2 并将它们传递给控制器:
var controllerUnderTest = new MyController(serviceMock, serviceMock2);
然后我用一些无效数据调用该方法,引发返回UnAuthorized()
:
var result = await controllerUnderTest.MyControllerMethod(invalidData).ExecuteAsync(CancellationToken.None);`
起初,这失败了。所以我加了
controllerUnderTest.Configuration = new HttpConfiguration();
controllerUnderTest.Request = new HttpRequestMessage();
所以现在它可以工作了。本地。它在调试时工作,它使用 ReSharper 的 testrunner 工作,它使用 NCrunch 工作。
但它在管道中不起作用。
当使用 ncrun 控制台工具在管道中执行时,测试失败并显示上述消息。
知道如何解决这个问题吗?当我明确初始化它时,配置如何为空?
编辑:这是堆栈跟踪:
System.InvalidOperationException : HttpControllerContext.Configuration must not be null.
bei System.Web.Http.Results.ExceptionResult.ApiControllerDependencyProvider.EnsureResolved()
bei System.Web.Http.Results.ExceptionResult.ApiControllerDependencyProvider.get_IncludeErrorDetail()
bei System.Web.Http.Results.ExceptionResult.Execute()
bei System.Web.Http.Results.ExceptionResult.ExecuteAsync(CancellationToken cancellationToken)