C# 如何编写asp.net web api的集成测试
我正忙着用asp.NETWebAPI设计一个web服务。我想开始对每个控制器进行单元测试 以下是我目前的测试课程:C# 如何编写asp.net web api的集成测试,c#,authentication,asp.net-web-api,integration-testing,C#,Authentication,Asp.net Web Api,Integration Testing,我正忙着用asp.NETWebAPI设计一个web服务。我想开始对每个控制器进行单元测试 以下是我目前的测试课程: [TestClass] public class MyDevicesControllerTest { [TestMethod] public void TestValidUser() { MyDeviceController controller = new MyDeviceController(); var
[TestClass]
public class MyDevicesControllerTest
{
[TestMethod]
public void TestValidUser()
{
MyDeviceController controller = new MyDeviceController();
var result = controller.Get();
}
[TestMethod]
public void TestInvalidUser()
{
MyDeviceController controller = new MyDeviceController();
var result = controller.Get();
}
}
但是我的web服务使用令牌身份验证。因此,我想知道如何模拟身份验证过程
所以我在想,我不可能让用户使用Http请求来测试它?Ie不是测试控制器,而是发出http请求并检查其答案
测试它的更简单/更好的方法是什么?在ASP.NET Web API中,身份验证在调用控制器之前在管道中进行,因此您需要为此编写一些集成测试。我在上的在线课程中向您介绍了如何做到这一点,但要点如下: 下面是一个针对使用内存中HTTP请求的资源的集成测试。此测试不使用网络:
[Fact]
public void GetReturnsResponseWithCorrectStatusCode()
{
var baseAddress = new Uri("http://localhost:8765");
var config = new HttpSelfHostConfiguration(baseAddress);
config.Routes.MapHttpRoute(
name: "API Default",
routeTemplate: "{controller}/{id}",
defaults: new
{
controller = "Home",
id = RouteParameter.Optional
});
var server = new HttpSelfHostServer(config);
using (var client = new HttpClient(server))
{
client.BaseAddress = baseAddress;
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue(
"Bearer",
new SimpleWebToken(new Claim("userName", "foo")).ToString());
var response = client.GetAsync("").Result;
Assert.True(
response.IsSuccessStatusCode,
"Actual status code: " + response.StatusCode);
}
}
如您所见,它向请求的HTTP头添加了一个“承载”令牌。SimpleWebToken
类只是我为这个场合编写的一个自定义类,但是您可以用一个更好的类来替换它,该类可以创建正确的身份验证令牌
如果您喜欢不同的身份验证方案(如Basic或Digest),则可以