我是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);
}
不确定此信息是否足以告诉我问题出在哪里,但如果需要发布更多信息,请告诉我。
您正在阅读 404 未找到请求中的内容:该请求仍将包含内容(告诉您找不到内容)。因此,断言内容长度超过 0 是没有意义的,因为它不区分失败的测试和通过的测试。
您应该做的是查看状态代码(message.StatusCode
)并确保它是HttpStatusCode.Ok
。
我还建议仅将Web Api项目添加为单元测试项目的引用 - 这样您就可以直接调用方法,而不必经历HttpClient
。有关这方面的更多信息(包括测试您的路线),请查看我的博客。
测试项目中直接使用 APICONTROLLER,只需添加引用并对其进行测试即可。
像这样:
public void TestMethod()
{
var ctr = new MyApiController();
string name = ctr.GetName();
Assert.IsTrue(name == "xpto");
}