在Visual Studio 2013中使用HttpClient进行单元测试/集成测试Web API

duyn9uyen

我很难用Visual Studio 2013测试我的API控制器。我的一个解决方案有一个Web API项目和一个Test项目。在我的测试项目中,我对此进行了单元测试:

[TestMethod]
public void GetProduct()
{
    HttpConfiguration config = new HttpConfiguration();
    HttpServer _server = new HttpServer(config);

    var client = new HttpClient(_server);

    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost:50892/api/product/hello"),
        Method = HttpMethod.Get
    };

    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    using (var response = client.SendAsync(request).Result)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

        var test = response.Content.ReadAsAsync<CollectionListDTO>().Result;
    }
}

我不断收到404我尝试使用一个Visual Studio(IIS Express)实例运行我的API,并尝试在另一个实例中调试此单元测试。但是没有运气。我已经验证可以将此URL放在浏览器中(一个Visual Studio正在调试时),并且可以看到JSON响应。但是我无法弄清楚如何使它与我的单元测试和HttpClient我尝试过在线查找示例,但似乎找不到。有人可以帮忙吗?

更新1:我尝试添加一条路线,但没有任何反应。

HttpConfiguration config = new HttpConfiguration();

// Added this line
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/product/hello/");

HttpServer _server = new HttpServer(config);

var client = new HttpClient(_server);

[...rest of code is the same]

这是我的API控制器

[HttpGet]
[Route("api/product/hello/")]
public IHttpActionResult Hello()
{
     return Ok();
}

更新解决方案:如果我HttpClient没有HttpServer对象就可以进行更新我仍然需要运行两个VS实例。1个运行我的API代码,另一个运行我的单元测试。

这是一种工作方法。

[TestMethod]
public void Works()
{
    var client = new HttpClient(); // no HttpServer

    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost:50892/api/product/hello"),
        Method = HttpMethod.Get
    };

    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    using (var response = client.SendAsync(request).Result)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }
}

有人知道为什么它不能与HttpServerHttpConfiguration传递给一起使用HttpClient吗?我已经看到许多使用此示例。

恩科西

参考以下文章,我能够做到...

具有内存托管的ASP.NET Web API集成测试

通过与HttpServer和一起HttpConfiguration进入HttpClient在下面的示例中,我创建了一个ApiController使用属性路由的简单方法我配置了HttpConfiguration以映射属性路由,然后将其传递给new HttpServer然后,HttpClient可以使用已配置的服务器对测试服务器进行集成测试调用。

public partial class MiscUnitTests {
    [TestClass]
    public class HttpClientIntegrationTests : MiscUnitTests {

        [TestMethod]
        public async Task HttpClient_Should_Get_OKStatus_From_Products_Using_InMemory_Hosting() {

            var config = new HttpConfiguration();
            //configure web api
            config.MapHttpAttributeRoutes();

            using (var server = new HttpServer(config)) {

                var client = new HttpClient(server);

                string url = "http://localhost/api/product/hello/";

                var request = new HttpRequestMessage {
                    RequestUri = new Uri(url),
                    Method = HttpMethod.Get
                };

                request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                using (var response = await client.SendAsync(request)) {
                    Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
                }
            }
        }
    }

    public class ProductController : ApiController {
        [HttpGet]
        [Route("api/product/hello/")]
        public IHttpActionResult Hello() {
            return Ok();
        }
    }
}

无需运行另一个VS实例即可对控制器进行集成测试。

以下简化的测试版本也可以正常工作

var config = new HttpConfiguration();
//configure web api
config.MapHttpAttributeRoutes();

using (var server = new HttpServer(config)) {

    var client = new HttpClient(server);

    string url = "http://localhost/api/product/hello/";

    using (var response = await client.GetAsync(url)) {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }
}

在您的情况下,您需要确保正确配置服务器以匹配您的Web API设置。这意味着您必须向该HttpConfiguration对象注册api路由

var config = new HttpConfiguration();
//configure web api
WebApiConfig.Register(config);
//...other code removed for brevity

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Visual Studio 2013 Express中安装单元测试生成器扩展

来自分类Dev

在VS 2013中使用HttpClient代理类对Web API进行单元测试

来自分类Dev

单元测试未在Visual Studio 2013和2012中显示

来自分类Dev

Visual Studio Express 2013:单元测试中的程序输出(控制台,调试等)

来自分类Dev

在Visual Studio 2013中向我的单元测试项目添加引用时出错

来自分类Dev

在Visual Studio中使用Chutzpah testrunner和requirejs时,在单独的项目中进行JavaScript单元测试

来自分类Dev

Visual Studio单元测试拒绝运行

来自分类Dev

使用Chutzpah在Visual Studio中逐步进行角度单元测试

来自分类Dev

在Visual Studio 2013中运行单元测试时运行其他项目

来自分类Dev

无法在Visual Studio 2013中使用断点调试测试

来自分类Dev

在Visual Studio 2013中生成单元测试报告

来自分类Dev

使用Visual Studio 2013性能测试REST API

来自分类Dev

如何使用Visual Studio 2013 Professional分析单个单元测试的性能?

来自分类Dev

使用Visual Studio测试适配器进行Boost单元测试-设置工作目录

来自分类Dev

IntelliTest与 在Visual Studio中进行单元测试

来自分类Dev

在Visual Studio中使用Catch2进行单元测试的最佳实践

来自分类Dev

在Visual Studio 2019中未发现的单元测试

来自分类Dev

在Visual Studio 2012中使用Moq进行单元测试

来自分类Dev

如何在Visual Studio 2013 Express中安装单元测试生成器扩展

来自分类Dev

在Visual Studio2013中使用茉莉花和Chutzpah进行单元测试angularjs无法正常工作

来自分类Dev

如何使用Visual Studio 2013 Ultimate对WinForms进行单元测试?

来自分类Dev

如何在Qt中设置单元测试-Visual Studio 2013项目

来自分类Dev

如何在Visual Studio 2013中为多个SQL单元测试编写“预测试”?

来自分类Dev

Visual Studio单元测试拒绝运行

来自分类Dev

C#单元测试Visual Studio 2013测试失败

来自分类Dev

Visual Studio单元测试检测失败

来自分类Dev

在Visual Studio 2013中使用HttpClient进行单元测试/集成测试Web API

来自分类Dev

在Visual Studio中进行正确的单元测试

来自分类Dev

如何在 Visual Studio 2015 中进行单元测试

Related 相关文章

  1. 1

    如何在Visual Studio 2013 Express中安装单元测试生成器扩展

  2. 2

    在VS 2013中使用HttpClient代理类对Web API进行单元测试

  3. 3

    单元测试未在Visual Studio 2013和2012中显示

  4. 4

    Visual Studio Express 2013:单元测试中的程序输出(控制台,调试等)

  5. 5

    在Visual Studio 2013中向我的单元测试项目添加引用时出错

  6. 6

    在Visual Studio中使用Chutzpah testrunner和requirejs时,在单独的项目中进行JavaScript单元测试

  7. 7

    Visual Studio单元测试拒绝运行

  8. 8

    使用Chutzpah在Visual Studio中逐步进行角度单元测试

  9. 9

    在Visual Studio 2013中运行单元测试时运行其他项目

  10. 10

    无法在Visual Studio 2013中使用断点调试测试

  11. 11

    在Visual Studio 2013中生成单元测试报告

  12. 12

    使用Visual Studio 2013性能测试REST API

  13. 13

    如何使用Visual Studio 2013 Professional分析单个单元测试的性能?

  14. 14

    使用Visual Studio测试适配器进行Boost单元测试-设置工作目录

  15. 15

    IntelliTest与 在Visual Studio中进行单元测试

  16. 16

    在Visual Studio中使用Catch2进行单元测试的最佳实践

  17. 17

    在Visual Studio 2019中未发现的单元测试

  18. 18

    在Visual Studio 2012中使用Moq进行单元测试

  19. 19

    如何在Visual Studio 2013 Express中安装单元测试生成器扩展

  20. 20

    在Visual Studio2013中使用茉莉花和Chutzpah进行单元测试angularjs无法正常工作

  21. 21

    如何使用Visual Studio 2013 Ultimate对WinForms进行单元测试?

  22. 22

    如何在Qt中设置单元测试-Visual Studio 2013项目

  23. 23

    如何在Visual Studio 2013中为多个SQL单元测试编写“预测试”?

  24. 24

    Visual Studio单元测试拒绝运行

  25. 25

    C#单元测试Visual Studio 2013测试失败

  26. 26

    Visual Studio单元测试检测失败

  27. 27

    在Visual Studio 2013中使用HttpClient进行单元测试/集成测试Web API

  28. 28

    在Visual Studio中进行正确的单元测试

  29. 29

    如何在 Visual Studio 2015 中进行单元测试

热门标签

归档