【发布时间】:2016-07-19 18:21:55
【问题描述】:
我想对异步控制器进行单元测试。我以前做过很多次,但从未调用Url.Link()方法来生成位置标头。
这是我的演示代码。
控制器
public class DemoController : ApiController
{
[HttpPost]
public async Task<IHttpActionResult> DemoRequestPost(string someRequest)
{
// do something await ...
var id = 1;
// generate url for location header (here the problem occurrs)
var url = Url.Link("DemoRequestGet", new {id = id});
return Created(url, id);
}
[HttpGet]
[Route("demo/{id}", Name = "DemoRequestGet")]
public async Task<IHttpActionResult> DemoRequestGet(int id)
{
// return something
return Ok();
}
}
测试
[TestFixture]
public class DemoControllerTests
{
[Test]
public async Task CreateFromDraftShouldSucceed()
{
// Arrange
var request = "Hello World";
var controller = new DemoController();
var httpConfiguration = new HttpConfiguration();
// ensure attribte routing is setup
httpConfiguration.MapHttpAttributeRoutes();
httpConfiguration.EnsureInitialized();
controller.Configuration = httpConfiguration;
// Act
var result = await controller.DemoRequestPost(request);
// Assert
Assert.AreEqual(result, 1);
}
}
我收到了
在 NUnit.Framework.Internal.ExceptionHelper.Rethrow(异常异常) 在 NUnit.Framework.Internal.AsyncInvocationRegion.AsyncTaskInvocationRegion.WaitForPendingOperationsToComplete(对象调用结果) 在 NUnit.Framework.Internal.Commands.TestMethodCommand.RunAsyncTestMethod(TestExecutionContext context)
【问题讨论】:
-
你应该
await结果。试试var result = await controller.DemoRequestPost(request); -
对不起,这是我的示例代码中的错误。如果我等待结果,也会发生同样的异常。
-
抛出的异常是什么,异常的消息是什么?还是 NUnit 没有报告完整的异常信息。如果是这样,那是一个错误,请在github.com/nunit/nunit/issues 报告它。如果您没有收到异常,请尝试使用 try/catch 来捕获异常并在调试器中检查它。希望这会告诉您失败的原因。
-
Nunit 不报告异常。测试只是失败了,甚至调试测试也无济于事。除此之外,我想我认为问题与缺少 MapHttpAttributeRoutes 有关。
标签: c# asp.net-web-api async-await nunit asp.net-web-api2