4
我在測試我的Nhibernate存儲庫時遇到一個奇怪的問題。爲什麼使用mstest進行單元測試時MSDTC行爲不一致?
我有10個像下面的單元測試。每次運行他們在一批中第一次失敗,其餘成功。如果一個接一個地運行它們都會失敗。如果在我的testrun之前重新啓動MSDTC,它有時會像以前一樣運行,有時候所有的測試都會成功。我無法找到一個模式,爲什麼它的行爲如此。
我希望事務回滾,以便每個測試都有一個乾淨的數據庫,因此交易處置。
測試/測試失敗了,由於這個錯誤:
System.Data.SqlClient.SqlException: MSDTC on server 'MYCOMPUTERNAME\SQLEXPRESS' is unavailable.
我的測試是這樣的:
[TestInitialize]
public void MyTestInitialize()
{
_transactionScope = new TransactionScope();
}
[TestCleanup]
public void MyTestCleanup()
{
if (_transactionScope != null)
{
_transactionScope.Dispose();
_transactionScope = null;
}
}
[TestMethod]
[TestCategory("RepositoryTests")]
public void RepositoryCanSaveAProduct()
{
var platform = ProductObjectMother.CreatePlatform("100010", "Supplier 10");
var mainsegment = ProductObjectMother.CreateMainSegment("123");
var application = ProductObjectMother.CreateApplication("Foo");
var productfamily = ProductObjectMother.CreateProductFamily("X99");
Engine i = ProductObjectMother.CreateEngine(platform, productfamily, application, mainsegment);
var repository = new ProductRepository();
repository.Save(i);
repository.Flush();
}
我建議你從簡單的控制檯應用程序運行相同的代碼,並檢查是否得到相同的錯誤。我認爲'MSTest'在這裏不是問題。另外你的代碼沒有使用'_transactionScope'運行,並且你不會在任何地方回滾它。 – Schaliasos 2013-01-22 17:32:27
您的代碼在單線程或業務邏輯中運行時是否會產生一些新線程? – 2013-01-28 19:25:59
在Dispose()之前添加'_transactionScope.Rollback()'怎麼辦? – 2013-01-29 13:21:42