我們有一個MVC 3,.Net 4.0應用程序和xunit中的一些specflow測試,似乎沒有問題。爲了完全控制我們的測試數據,我們希望在每個場景開始時設置一個乾淨的數據庫,然後處理它。爲此,我們需要在每個場景之前動態更改連接字符串。連接到數據庫中使用NHibernate會話處理,我們用下面的代碼更改連接字符串:如何在Specflow測試期間切換數據庫?
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測試和實際應用正在運行兩個不同的過程和他們不這樣做共享相同的_sessionFactory,儘管它被定義爲靜態。因此,更改Setup_Database函數中的連接字符串會更改specflow測試進程的會話,而不是應用程序進程正在使用的連接字符串。
- 驗收測試數據總體是否有更好的方法?
- 我們的切換連接字符串的方法是否有意義?
- Specflow測試是否可以操縱 應用程序本身的會話?
通過驗收測試你是什麼意思?您是否在談論使用specflow測試進行設置後與用戶進行交互的用戶? – AlSki
我們只是指硒驅動的測試。 – Shermin