Web API单元测试未按预期工作

时间:2015-04-15 18:12:52

标签: c# unit-testing asp.net-web-api

我是Web API的新手。我用c#编写的单元测试继承了代码。但是,当我运行单元测试时,无论控制器名称如何,测试都会通过。例如:http://localhost/api/users - >即使用户拼写错误,单元测试也会通过。

我在控制器中有以下代码:

public async Task TestGetUsers()
{
    usersController controller = new usersController(new TestUserRepository());
    ApiControllerConfig.SetupControllerForTest(controller, "http://localhost/api/users", HttpMethod.Get);
    IHttpActionResult result = controller.Get();
    HttpResponseMessage message = await result.ExecuteAsync(CancellationToken.None);
    string content = await message.Content.ReadAsStringAsync();
    Assert.IsTrue(content.Length > 0);
}  

不确定此信息是否足以告诉我问题所在,但如果需要发布更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

您正在阅读404未找到的请求中的内容:仍然会有内容(告诉您无法找到内容)。因此断言内容长度超过0是没有意义的,因为它没有区分失败和通过的测试。

您应该查看状态代码(message.StatusCode)并确保其为HttpStatusCode.Ok

我还建议只添加Web Api项目作为单元测试项目的参考 - 这样您就可以直接调用方法而不必通过HttpClient。有关此问题的更多信息(包括测试您的路线),请查看my blog

答案 1 :(得分:-1)

你可以在测试项目中直接使用apicontroller,只需添加引用并测试它。

这样的事情:

 public void TestMethod()
    {
       var ctr = new MyApiController();
       string name = ctr.GetName();
       Assert.IsTrue(name == "xpto");
    }