使用多个Web API项目进行WebApi内存中测试

时间:2016-08-23 13:36:02

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

我正在使用System.Web.Http.HttpServer来启动内存服务器,以用于我的Web API项目的集成测试。

我有一个Web API项目,以及解决方案中的单个Integration Test项目。这一切都很好。

现在我已经为解决方案添加了另一个Web API项目,当我为新的API控制器添加测试时 - 如果两个Web API项目的测试都在同一个测试运行中运行,那么测试将失败。

如果我为API'A'运行测试 - 它们都是绿色的。 如果我为API'B'运行测试 - 它们都是绿色的。 如果我在同一个testrun中运行API“A”的测试和API“B”的测试 - 第二次测试失败。

所以不知何故配置/设置相互渗透 - 我只是无法弄清楚为什么 - 最重要的是如何阻止它。

我在其他地方读过,Web API通过反射找到属性路由并加载程序集 - 这可能是发生了什么 - 两个API都在内存中 - 因此路由失败了吗?失败的第二个测试得到404回答。

我的测试构建如下

using (var config = new HttpConfiguration())
{
     config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

     ServiceA.AutoMapperConfig.Configure();
     ServiceA.WebApiConfig.Register(config, ImInvoiceService.ChooseAuthorizeFilter.Basic, addPerRequestHandler: false);

     using (var server = new HttpServer(config))
     { 
          var client = new HttpClient(server);
          var request = CreateWebRequest(HttpMethod.Post, "api/invoices");
          request.Content = new     StringContent(CreateJsonInvoice(purchaseOrder, overrideCurrencyCode: "XXX"), Encoding.UTF8, JsonContentType);

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

using (var config = new HttpConfiguration())
{
    config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

    ServiceB.AutoMapperConfig.Configure();
    ServiceB.WebApiConfig.Register(config);

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

        var client = new HttpClient(server);
        var request = CreateWebRequest(HttpMethod.Post, "api/invoices");

        request.Content = new StringContent(CreateJsonInvoice(purchaseOrder, overrideCurrencyCode: "XXX"), Encoding.UTF8, JsonContentType);

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

如代码中所示,我在每个测试中创建了一个新的HttpServer和一个新的HttpConfiguration - 让我觉得我得到了新的对象。

我试图通过这种方式调试之后我很困难,我试图清除路由,配置设置等,但似乎没有任何帮助。

我可以为第二个API创建一个新的测试项目,但由于这是集成测试,我依赖于一些设置 - 并且需要将大量工作复制到另一个测试项目 - 我想避免这样做。

但是如果Web API / HttpServer无法处理同一个AppDomain中可能是我最后一个的两个项目。

欢迎任何好的建议 - 我希望有人有个好主意。

最好的问候 /安德斯

0 个答案:

没有答案