0

因此,我为 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();

这个 Stackoverflow 帖子

所以现在它可以工作了。本地。它在调试时工作,它使用 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) 
4

0 回答 0