MVC 3、.Net 4.0 アプリケーションと、問題なく実行されているように見える xunit の多数の specflow テストがあります。テスト データを完全に管理するために、各シナリオの開始時にクリーンなデータベースをセットアップし、後で破棄します。そのためには、各シナリオの前にその場で接続文字列を変更する必要があります。データベースへの接続は NHibernate セッションを使用して処理され、次のコードを使用して接続文字列を変更しました。
public class SessionFactoryProvider
{
private static ISessionFactory _sessionFactory;
public static ISessionFactory BuildSessionFactory(bool resetConnection = false)
{
if (ConnectionString == null)
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
}
if (_sessionFactory == null || resetConnection)
{
_sessionFactory = Fluently.Configure()
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<InvoiceMap>().Conventions.AddFromAssemblyOf<CascadeConvention>())
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(ConnectionString))
.ExposeConfiguration(UpdateSchema)
.CurrentSessionContext("web")
.BuildSessionFactory();
}
return _sessionFactory;
}
}
[BeforeScenario]
public static void Setup_Database()
{
var connection = DBHandler.GetAcceptanceDatabaseConnection();
SessionFactoryProvider.ConnectionString = connection.ConnectionString;
var session = SessionFactoryProvider.BuildSessionFactory(true).OpenSession();
}
しかし、Specflow テストと実際のアプリケーションは 2 つの異なるプロセスとして実行されており、静的として定義されているにもかかわらず、同じ _sessionFactory を共有していないようです。そのため、Setup_Database 関数で接続文字列を変更すると、アプリケーション プロセスが使用している接続文字列ではなく、specflow テストのプロセスのセッションが変更されます。
- 受け入れテストのデータを取り込むためのより良い方法はありますか?
- 接続文字列を切り替えるためのアプローチは理にかなっていますか?
- Specflow テストでアプリケーション自体のセッションを操作することは可能ですか?