Je suis en train de passer quelques tests fonctionnels sur mon application, et je pense que je suis assez proche. Mon problème est que lorsque je lance mon premier test, j'obtiens l'erreur.ServiceStack AppHostHttpListenerBase Impossible de se connecter au serveur distant
Impossible de se connecter au serveur distant.
attendu: OK
Mais était: 0
Je peux confirmer que si je mets un point d'arrêt sur la Assertion, et puis essayer de frapper le BaseUrl
dans mon navigateur, il ne se trouve pas.
Voici mon test.
[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));
}
Le AppServerTestSetup
ressemble à ceci
[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();
}
}
Et le ServiceTestAppHostBase
ressemble à ceci.
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();
}
}
Note: J'utilise aussi la AppHostContainerRegistrations
dans l'application principale, et il fonctionne. J'ai également vérifié qu'il est exécuté dans la configuration de test. Le AppHostContainerRegistrations
(par défaut) ressemble à ceci.
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") });
}
}
La raison pour laquelle nous faisons notre configuration Db comme cela est parce que nous avons une seule chaîne de connexion et le nom db dans le App.Config, et nous comptons sur Transforms au cours du déploiement pour configurer la base de données.
Quelqu'un peut-il m'aider à résoudre ce problème?
ServiceStack auto-branche et enregistre ses propres services, c'est-à-dire si 'UserService' est un ServiceStack' Service', supprimez l'enregistrement. – mythz
@mythz Lorsque je supprime l'enregistrement, The SetUp lève une 'NullReferenceException' sur' _appHost.Init(); ' –
et par" enregistrement "je suppose que vous faites référence à' public ServiceTestAppHostBase(): base ("OurApp.AppServer ", typeof (UserServiceInterface) .Assembly) {}' –