Я определил следующий базовый класс, и все мои классы интеграционных тестов могут наследовать от него.
Код: Выделить всё
public abstract class IntegrationTestBase
{
private TransactionScope scope;
[TestInitialize]
public void TestInitialize()
{
scope = new TransactionScope();
}
[TestCleanup]
public void TestCleanup()
{
scope.Dispose();
}
}
Код: Выделить всё
[TestMethod]
public void SaveTwoDocumentsSimultaneously_WorkSuccessfully()
{
//Assign
var doc1 = new Document() { Number = "Test-1" };
var doc2 = new Document() { Number = "Test-2" };
//Action
Parallel.Invoke(() => SaveNewDocument(doc1), () => SaveNewDocument(doc2));
//Assert
Assert.IsTrue(true);
}
void SaveNewDocument(Document doc)
{
using (var ctx = new MyDbContext())
{
ctx.Documents.Add(doc);
ctx.SaveChanges();
}
}
Думаю, стоит используйте DependentTransaction по этой ссылке.
Как я могу использовать TransactionScope, определенный в IntegrationTestBase, и использовать его в качестве родительской транзакции?
Подробнее здесь: https://stackoverflow.com/questions/790 ... ti-threade