Я работаю через некоторые функциональные тесты в своем приложении, и я думаю, что получаю довольно близко. Моя проблема в том, что когда я запускаю свой первый тест, я получаю сообщение об ошибке.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, и мы рассчитываем на Преобразованиях во время развертывания для настройки базы данных.
Может ли кто-нибудь помочь мне устранить эту проблему?
ServiceStack автоматически прокладывает и регистрирует свои собственные услуги, то есть, если 'UserService' является сервисом ServiceStack', удалите регистрацию. – mythz
@mythz Когда я удаляю регистрацию, SetUp выдает 'NullReferenceException' на' _appHost.Init(); ' –
и по« регистрации »я предполагаю, что вы ссылаетесь на' public ServiceTestAppHostBase(): base («OurApp.AppServer ", typeof (UserServiceInterface) .Assembly) {}' –