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