Итак, работаем с MS Test Framework, пишем автотесты разного уровня.
Общая логика вызова методов при запуске тестов (юнит, неюнит — не важно) такова (см
http://blogs.msdn.com/b/nnaderi/archive/2007/02/17/explaining-execution-order.aspx):
0. стандартный ctor [TestClass]-а
1. static (Testcontext context), помеченный как [ClassInitialize] — вызывается раз до запуска всей пачки тестов в пределах testrun-а
2. [TestInitialize] — вызывается для каждого метода до его запуска
3. [TestMethod] — сам код теста
4. [TestCleanup] — после каждого тест-метода
?. повтор пп. 2-4 для всех методов
n. static [ClassCleanup]
То есть по идее, вызываемый TestInitialize метод мог бы иметь информацию об имени TestMethod-а, ради которого он, собственно, был запущен. Я прав?
Если да — то какие варианты есть это достать?
PS: вопрос больше академический, чем практический — но столкнулся с такой задачей на вполне реальном проекте
Здравствуйте, FrostRus, Вы писали:
FR>То есть по идее, вызываемый TestInitialize метод мог бы иметь информацию об имени TestMethod-а, ради которого он, собственно, был запущен. Я прав?
FR>Если да — то какие варианты есть это достать?
Вынесите такой метод в отдельный TestClass. Или просто определите метод инициализации и из теста дергайте его.
Здравствуйте, Lloyd, Вы писали:
L>Вынесите такой метод в отдельный TestClass. Или просто определите метод инициализации и из теста дергайте его.
Спасибо, но вы не совсем поняли, что я имею в виду.
Вопрос не в том, как другим способом можно решить такую задачу (уже давно решил), а в том, как по спецификации CLR это работает. Говорю же — вопрос академический, интересно стало. По здравой логике вроде должен быть способ, но хочется понимать что и как там внутри происходит.
Здравствуйте, FrostRus, Вы писали:
L>>Вынесите такой метод в отдельный TestClass. Или просто определите метод инициализации и из теста дергайте его.
FR>Спасибо, но вы не совсем поняли, что я имею в виду.
FR>Вопрос не в том, как другим способом можно решить такую задачу (уже давно решил), а в том, как по спецификации CLR это работает.
CLR тут не причем. Ту информацию, что вы хотите, получить из TestInitialize нельзя, а нельзя — потому что не надо, и более того, потенциально приведет к плохой организации тестов.
Проще надо быть.