ClassInitialize не выполняется при попытке запустить контрольные примеры, сгруппированные по классам
У меня есть пара TestClasses, каждый из которых имеет несколько TestMethods. Опять же, мне нужно создать данные для каждого из этих TestMethods, каждый из которых является дескриптором в файле SuiteBase, который наследуется каждым из TestClasses. Мне нужно создать данные один раз для каждого TestClass, чтобы все TestMethods в этом классе могли использовать одни и те же данные. По этой причине я поместил код создания данных в ClassInitialize в файле SuiteBase. Структура SuiteBase:
public class SuiteBase
{
[ClassInitialize]
public void ClassInit()
{
//Create the data for the all test cases under one TestClass
}
[TestInitialize]
public void Init()
{
//Starts the app each time for each TestMethod
}
Структура TestClass:
[TestClass()]
public class ScenarioOne : SuiteBase
{
[TestMethod()]
public void TestCase1()
{
//Blah Blah
}
[TestMethod()]
public void TestCase2()
{
//Blah Blah
}
[TestMethod()]
public void TestCase3()
{
//Blah Blah
}
}
Теперь я пытаюсь запустить модульные тесты (сгруппированные по классам) из моего тестового обозревателя.
Теоретически, до запуска любого из TestMethods код ClassInitialize в SuiteBase должен сначала работать. Но я вижу, что код ClassInitialize не просто запускается. Я поставил точку останова в ClassInitialize и отладил, код не был выполнен вообще. Мое предположение неверно в поведении ClassInitialize или я делаю что-то в корне неправильно?
1 ответ
К сожалению, метод ClassInitializeAttribute не может быть унаследован. Поскольку ClassInitializeAttribute не может быть унаследован, при инициализации класса ScenarioOne невозможно вызвать метод ClassInitialize из класса SuiteBase.
Попытайтесь решить эту проблему, вам придется снова определить метод ClassInitialize в ScenarioOne и просто вызвать базовый метод вместо дублирования кода.
[TestClass()]
public class ScenarioOne : SuiteBase
{
[ClassInitialize]
public static void ClassInit()
{
SuiteBase.ClassInit();
//Create the data for the all test cases under one TestClass
}
[TestMethod()]
public void TestCase1()
{
//Blah Blah
}
[TestMethod()]
public void TestCase2()
{
//Blah Blah
}
[TestMethod()]
public void TestCase3()
{
//Blah Blah
}
}
Надеюсь это поможет