У меня есть вопрос о последовательном запуске UnitTests. К сожалению, в сценарии невозможно запустить их параллельно или смоделировать базу данных. Проект написан на NET core 3.1, и UnitTests необходимо выполнить операции с базой данных до и после запуска Unittest.
После прочтения https://www.meziantou.net/mstest-v2-execute-tests-in-parallel.htm и множества других статей о последовательном UnitTesting я придумал это (упрощенно):
BaseClass:
namespace XY.Test
{
[TestClass]
public class BaseTest: TimerModel
{
private static readonly DbCreator Creator = new DbCreator();
public static readonly DbConnectionManager ConnectionManager = new DbConnectionManager();
[TestInitialize]
public void BaseTestInitialize()
{
CreateTestData();
}
[TestCleanup]
public void BaseTestCleanup()
{
RemoveTestData();
}
public void CreateTestData()
{
RemoveTestData();
Creator.ExecuteSqlFromScript(ConnectionManager, @"Resources\CreateTestData.sql");
}
public void RemoveTestData()
{
Creator.ExecuteSqlFromScript(ConnectionManager, @"Resources\EmptyTestDataTables.sql");
}
}
}
TestClass:
[assembly: Parallelize(Workers = 0, Scope = ExecutionScope.ClassLevel)] //<-- Also tried out Workers = 1 and Scope = ExecutionScope.MethodLevel
namespace XY.Test.Models
{
[TestClass]
public class TerminalConfigModelTest: BaseTest
{
[TestMethod]
[DoNotParallelize]
public void TestMethod1()
{
...
}
[TestMethod]
[DoNotParallelize]
public void TestMethod2()
{
...
}
}
}
По какой-то причине, независимо от того, что я делаю, юнит-тесты выполняются параллельно. Что мне нужно изменить, чтобы они выполнялись последовательно?
Когда я выполняю все тесты в классе теста, TestInitialize базового класса вызывается дважды перед запуском TestCleanup. Это приводит к сбою метода CreateTestData, так как индексы предотвращают двойную вставку тестовых данных.
Что бы я ожидал:
- TestInitialize1 называется
- TestMethod1 выполняется
- TestCleanup1 называется
- TestInitialize2 вызывается
- Испытан TestMethod2
- Вызывается TestCleanup2
- ...
Что происходит:
- TestInitialize1 is вызываемый
- Испытывается TestMethod1
- Вызывается TestInitialize2 до вызова TestCleanup1
- Сбой выполнения TestMethod2
Не понимаю ли я параметр [DoNotParallelize]?