MSTest, когда происходит вызов [ClassCleanup] при наличии наследования тестовых классов
У меня есть иерархия функциональных тестов, как это
[TestClass]
class BaseClass
{
// specific methods and members relevant to all functional tests are here
// ie how to work with db
}
[TestClass]
class Module1:BaseClass
{
[ClassInitialize]
public static void Module1TestsInit(TestContext context)
{
//create some db data here, which is needed only for Module1
}
[ClassCleanup]
public static void Module1TestsCleanup()
{
//delete Module1 db data
}
}
[TestClass]
class Module2:BaseClass
{
[ClassInitialize]
public static void Module2TestsInit(TestContext context)
{
//create some db data here, which is needed only for Module2
}
[ClassCleanup]
public static void Module2TestsCleanup()
{
//delete Module2 db data
}
}
Когда тесты будут выполнены, я ожидаю, что [ClassCleanup]
будет работать, когда все методы из Module1
завершены, а затем снова, когда Module2
тесты закончены. У меня есть много классов, таких как Module1 с тем же базовым классом.
Однако все методы ClassCleanup запускаются только после завершения ВСЕХ тестов из всех модулей. Это не удобно, поскольку у меня есть несколько противоречивых данных в разных модулях, и я хочу очистить результаты каждого класса, когда тесты этого класса будут завершены.
Какие-нибудь мысли?
4 ответа
Я полагал, что это не имеет ничего общего с наследством.
http://blogs.msdn.com/b/ploeh/archive/2007/01/06/classcleanupmayrunlaterthanyouthink.aspx
Так работает MSTest.
Однако Nunit работает не так, как MSTest. Метод ClassCleanup должен выполняться в первую очередь перед выполнением следующей инициализации класса в MSTest.
Это утверждение...
все методы ClassCleanup запускаются только после завершения ВСЕХ тестов из всех модулей
... конфликтует с MSDN для ClassCleanupAttribute (выделено мной) ...
Определяет метод, содержащий код, который будет использоваться после выполнения всех тестов в классе теста и для освобождения ресурсов, полученных классом теста. Этот класс не может быть унаследован.
Так как ваши методы инициализации и очистки являются статическими, они не наследуются от общей базы, поэтому они должны быть независимыми. Но поскольку они статичны (а я не использую VisualStudio.TestTools, поэтому не могу проверить), это вызывает проблемы, которые у вас возникают?
Если это возможно, я бы попытался разделить ваши тестовые классы на 2 файла и сделать два вызова MSTest. Здесь мы столкнулись с некоторыми проблемами, и это, похоже, сработало.