C# web API单元测试未按预期工作

C# web API单元测试未按预期工作,c#,unit-testing,asp.net-web-api,C#,Unit Testing,Asp.net Web Api,我不熟悉Web API。我继承了用c编写的单元测试代码。但是,当我运行单元测试时,无论控制器名称如何,测试都会通过。例如:->即使用户拼写错误,单元测试也会通过 控制器中有以下代码: public async Task TestGetUsers() { usersController controller = new usersController(new TestUserRepository()); ApiControllerConfig.SetupControllerForT

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

控制器中有以下代码:

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

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

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

大概是这样的:

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

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

大概是这样的:

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

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

您应该做的是查看statuscode消息.statuscode并确保它是HttpStatusCode.Ok


我还建议您只添加WebAPI项目作为对单元测试项目的引用,这样您就可以直接调用这些方法,而不必通过HttpClient。有关这方面的更多信息,包括测试您的路由,请查看。

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

您应该做的是查看statuscode消息.statuscode并确保它是HttpStatusCode.Ok


我还建议您只添加WebAPI项目作为对单元测试项目的引用,这样您就可以直接调用这些方法,而不必通过HttpClient。有关这方面的更多信息,包括测试路由,请查看。

您使用的是什么单元测试框架?您使用的是什么单元测试框架?感谢Coastpear的回复。这是唯一可行的方法吗?谢谢你的回复。这是唯一可行的方法吗?