MSTest, когда происходит вызов [ClassCleanup] при наличии наследования тестовых классов - PullRequest
3 голосов
/ 02 декабря 2011

У меня есть иерархия функциональных тестов, подобных этой

[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 ]

5 голосов
/ 03 декабря 2011

Я полагал, что это не имеет ничего общего с наследованием.

http://blogs.msdn.com/b/ploeh/archive/2007/01/06/classcleanupmayrunlaterthanyouthink.aspx

Так работает MSTest.

3 голосов
/ 09 февраля 2012

Однако Nunit работает не так, как MSTest. Метод ClassCleanup должен выполняться в первую очередь перед выполнением следующей инициализации класса в MSTest.

2 голосов
/ 02 декабря 2011

Этот оператор ...

все методы ClassCleanup запускаются только после завершения ВСЕХ тестов из всех модулей

... конфликтует с MSDN for ClassCleanupAttribute (выделение мое) ...

Идентифицирует метод, содержащий код, который будет использоваться после того, как все тесты в классе теста будут выполнены и для освобождения ресурсов, полученных с помощьютестовый класс.Этот класс не может быть унаследован.

Поскольку ваши методы инициализации и очистки являются статическими, они не наследуются от общей базы, поэтому они должны быть независимыми.Но так как они статические (а я не использую VisualStudio.TestTools, поэтому не могу проверить), это вызывает проблемы, которые у вас возникают?

0 голосов
/ 02 декабря 2011

Если это возможно, я бы попытался разделить ваши тестовые классы на 2 файла и сделать два вызова MSTest.Здесь мы столкнулись с некоторыми проблемами, и это, похоже, сработало.

...