2013-10-07 2 views
4

Я работаю через некоторые функциональные тесты в своем приложении, и я думаю, что получаю довольно близко. Моя проблема в том, что когда я запускаю свой первый тест, я получаю сообщение об ошибке.ServiceStack AppHostHttpListenerBase Не удается подключиться к удаленному серверу

не удалось подключиться к удаленному серверу.

Ожидаемое: OK
Но было: 0

Я могу подтвердить, что если я ставлю точку останова на Assert, а затем попытаться ударить BaseUrl в моем браузере, он не найден.

Вот мой тест.

[Test] 
public void MyTestTest() 
{ 
    var client = new RestClient(ServiceTestAppHostBase.BaseUrl); 
    // client.Authenticator = new HttpBasicAuthenticator(NUnitTestLoginName, NUnitTestLoginPassword); 
    var request = new RestRequest("https://stackoverflow.com/users/", Method.GET); 
    request.RequestFormat = DataFormat.Json; 
    var response = client.Execute(request); 

    // do assertions on the response object now 
    Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.OK)); 
} 

AppServerTestSetup выглядит следующим образом

[SetUpFixture] 
public class AppServerTestSetup 
{ 
    ServiceTestAppHostBase _appHost; 

    [SetUp] 
    public void SetUp() 
    { 
     _appHost = new ServiceTestAppHostBase(); 
     _appHost.Init(); 
     _appHost.Start(ServiceTestAppHostBase.BaseUrl); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     _appHost.Dispose(); 
    } 
} 

И ServiceTestAppHostBase выглядит следующим образом.

public class ServiceTestAppHostBase : AppHostHttpListenerBase 
{ 
    public const string BaseUrl = "http://localhost:8082/"; 
    public ServiceTestAppHostBase() : base("OurApp.AppServer", typeof(UserServiceInterface).Assembly) { } 

    public override void Configure (Container container) 
    { 
     JsConfig.EmitCamelCaseNames = true; 

     SetConfig(new EndpointHostConfig 
     { 
      MapExceptionToStatusCode = { 
       { typeof(NotFoundException), 404 }, // Map exception to 404 not found http response. 
       { typeof(SystemAccountChangeException), 405 } // Map exception to 405 method not allowed. 
      } 
     }); 

     // Shared Container Registration 
     AppHostContainerRegistrations.Register(container); 

     // Setup the database 
     var migrationRunner = container.Resolve<IMigrationRunner>(); 

     migrationRunner.CreateDatabase(); 
     migrationRunner.RunAll(); 
    } 
} 

примечание: Я также использую AppHostContainerRegistrations в главном приложении, и она работает. Я также проверил, что он запускается в тестовой настройке.

AppHostContainerRegistrations (для справки) выглядит следующим образом.

public class AppHostContainerRegistrations 
{ 
    public static void Register(Container container) 
    { 
     // IOC Registration 
     // Register base connection config 
     var dbConnection = ConfigurationManager.ConnectionStrings["databaseConnection"]; 
     var databaseName = ConfigurationManager.AppSettings["databaseName"]; 

     // Register Sqlserver DbProvider 
     container.Register<IDbConnectionProvider>(containr => new DbConnectionProvider(dbConnection.ConnectionString, dbConnection.ProviderName)); 
     container.Register<IDbProvider>(containr => new DbProvider(containr.Resolve<IDbConnectionProvider>(), databaseName)); 

     // Register repositories 
     container.RegisterAs<DatabaseVersionRepository, IDatabaseVersionRepository>(); 
     container.RegisterAs<UserRepository, IUserRepository>(); 
     container.RegisterAs<GroupRepository, IGroupRepository>(); 
     container.RegisterAs<DeviceRepository, IDeviceRepository>(); 
     container.RegisterAs<SecuritySettingsRepository, ISecuritySettingsRepository>(); 

     // Register services 
     container.RegisterAs<UserService, IUserService>(); 
     container.RegisterAs<GroupService, IGroupService>(); 
     container.RegisterAs<SecuritySettingsService, ISecuritySettingsService>(); 

     // Register everything else 
     container.RegisterAs<PasswordHasher, IPasswordHasher>(); 
     container.RegisterAs<MigrationRunner, IMigrationRunner>(); 

     container.Register(new UserModel { Id = new Guid("6C83DDEC-5E58-4F28-BDE2-61EBF1B49691") }); 

    } 
} 

Причина мы делаем нашу установку Db, как это происходит потому, что мы имеем одну строки соединения и дб имени в App.Config, и мы рассчитываем на Преобразованиях во время развертывания для настройки базы данных.

Может ли кто-нибудь помочь мне устранить эту проблему?

+0

ServiceStack автоматически прокладывает и регистрирует свои собственные услуги, то есть, если 'UserService' является сервисом ServiceStack', удалите регистрацию. – mythz

+0

@mythz Когда я удаляю регистрацию, SetUp выдает 'NullReferenceException' на' _appHost.Init(); ' –

+0

и по« регистрации »я предполагаю, что вы ссылаетесь на' public ServiceTestAppHostBase(): base («OurApp.AppServer ", typeof (UserServiceInterface) .Assembly) {}' –

ответ

5

После продолжительного разговора с @mythz выясняется, что VS должен запускаться в режиме администратора для запуска «AppHostHttpListenerBase».

Я также должен запускать Powershell в качестве администратора при работе ./build с терминала.

Смежные вопросы