2014-04-25 4 views
3

Я работаю над набором модульных тестов, которые включают в себя тестирование HTTP-клиент/серверных функций с самостоятельным сервером. Но я не могу получить даже самый простой тест для работы. Вот мой кодHTTP-хостинг и модульные тесты

UnitTest1.cs

using System; 
    using System.Net.Http; 
    using System.Web.Http.SelfHost; 
    using NUnit.Framework; 
    using SomeWebService; 

    namespace UnitTestProject1 
    { 
     [TestFixture] 
     public class UnitTest1 
     { 
      [Test] 
      public void TestMethod1() 
      { 
       var baseAddress = new Uri("http://localhost:9876"); 
       var config = new HttpSelfHostConfiguration(baseAddress); 
       new Bootstrap().Configure(config); 
       var server = new HttpSelfHostServer(config); 
       using (var client = new HttpClient(server)) 
       { 
        client.BaseAddress = baseAddress; 
        var response = client.GetAsync("").Result; 
        Assert.True(response.IsSuccessStatusCode, "Actual status code: " + response.StatusCode); 
       } 
      } 
     } 
    } 

Bootstrap.cs

using System.Web.Http; 

    namespace SomeWebService 
    { 
     public class Bootstrap 
     { 
      public void Configure(HttpConfiguration config) 
      { 
       config.Routes.MapHttpRoute(name: "API Default", routeTemplate: "{controller}/{id}", defaults: new 
       { 
        controller = "Home", 
        id = RouteParameter.Optional 
       }); 
      } 
     } 
    } 

и HomeController.cs

using System.Net.Http; 
    using System.Web.Http; 

    namespace SomeWebService 
    { 
     class HomeController:ApiController 
     { 
      public HttpResponseMessage Get() 
      { 
       return this.Request.CreateResponse(); 
      } 
     } 
    } 

Результаты испытаний в:

 Actual status code: NotFound 
     Expected: True 
     But was: False 

Что я делаю неправильно?

пакеты установлены

Install-Package Microsoft.Net.Http -version 2.0.20710 
Install-Package Microsoft.AspNet.WebApi.SelfHost -version 4.0.20918 
Install-Package Microsoft.AspNet.WebApi.Core -version 4.0.20710 

ответ

1

HomeController является частным, потому что вы явно не объявили его общественности. Попробуйте сделать его общедоступным:

public class HomeController:ApiController 
{ 
    public HttpResponseMessage Get() 
    { 
     return this.Request.CreateResponse(); 
    } 
} 
+0

Genius ... Большое вам спасибо, Марк. – Darek

2

Если вы хотите, чтобы ваши тесты бежать еще быстрее, вы можете избежать весь стек TCP/IP, используя множество чисто в памяти,

 [Test] 
     public void TestMethod1() 
     { 
      var config = new HttpConfiguration(); 
      new Bootstrap().Configure(config); 
      var server = new HttpServer(config); 
      using (var client = new HttpClient(server)) 
      { 
       client.BaseAddress = baseAddress; 
       var response = client.GetAsync("").Result; 
       Assert.True(response.IsSuccessStatusCode, "Actual status code: " + response.StatusCode); 
      } 
     } 
Смежные вопросы