【问题标题】:How to write integration test for asp.net web api如何为asp.net web api编写集成测试
【发布时间】:2014-04-13 03:54:33
【问题描述】:

我正忙着用 asp.net web api 设计一个 web 服务。我想开始对每个控制器进行单元测试。

到目前为止,这是我的测试课:

[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 请求来测试它?即不是测试控制器我只是发出一个http请求并检查它的答案?

进行测试的更简单/更好的方法是什么?

【问题讨论】:

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


    【解决方案1】:

    在 ASP.NET Web API 中,身份验证在调用控制器之前发生在管道中,因此您需要为此编写一些集成测试。我在Outside-In TDD 的在线课程中向您介绍了如何做到这一点,但这里是它的要点:

    这是一个使用 in-memory 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);
        }
    }
    

    如您所见,它将“Bearer”令牌添加到请求的 HTTP 标头中。 SimpleWebToken 类只是我为这个场合编写的自定义类,但您可以将其替换为创建正确身份验证令牌的更好的类。

    如果您喜欢不同的身份验证方案(例如基本或摘要),您可以set the Authorization header accordingly

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多