【问题标题】:web API unit test not working as expectedWeb API 单元测试未按预期工作
【发布时间】:2015-04-15 18:12:51
【问题描述】:

我是 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);
}  

不确定这些信息是否足以告诉我问题出在哪里,但如果需要发布更多信息,请告诉我。

【问题讨论】:

  • 你用的是什么单元测试框架?

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


【解决方案1】:

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

您应该做的是查看状态码 (message.StatusCode) 并确保它是 HttpStatusCode.Ok

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

【讨论】:

    【解决方案2】:

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

    类似这样的:

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

    【讨论】:

    • 感谢 Coastpear 的回复。这是让它发挥作用的唯一方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2013-01-13
    • 2022-07-08
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多