Есть ли способ получить доступ к параметрам текущего теста (кроме самих параметров)?
Если я напишу параметризованный тест NUnit, используя что-то вроде [TestCaseSource]
или же [ValueSource]
NUnit передаст параметры непосредственно моему методу тестирования. Но есть ли другой способ получить доступ к этим параметрам, например, из SetUp
или из вспомогательного метода (без необходимости явно передавать значение параметра этому вспомогательному методу)?
Например, предположим, что у меня есть три разных сценария (возможно, это "повышение ставок", "снижение ставок" и "постоянные ставки"). Я пишу тесты для конкретного расчета, и некоторые тесты будут вести себя одинаково во всех трех сценариях; другие в двух из трех (и я напишу второй тест для другого сценария); другие будут иметь отдельный тест для каждого сценария. Параметризованные тесты кажутся хорошим способом смоделировать это; Я могу написать объект стратегии для каждого сценария и параметризовать тесты в зависимости от сценариев, к которым должен применяться каждый тест.
Я могу сделать что-то вроде этого:
public IEnumerable<RateStrategy> AllScenarios {
get {
yield return new RisingRatesStrategy();
yield return new FallingRatesStrategy();
yield return new ConstantRatesStrategy();
}
}
[TestCaseSource("AllScenarios")]
public void SomethingThatIsTheSameInAllScenarios(RateStrategy scenario) {
InitializeScenario(scenario);
... arrange ...
... act ...
... assert ...
}
Недостатком этого является то, что мне нужно помнить, чтобы позвонить InitializeScenario
в каждом тесте. Это легко испортить, и это также затрудняет чтение тестов - в дополнение к атрибуту, который точно указывает, к каким сценариям применяется этот тест, мне также нужна дополнительная строка кода, загромождающая мой тест, говоря, что о да Есть сценарии.
Есть ли другой способ получить доступ к параметрам теста? Есть ли статическое свойство, похожее на TestContext
, что позволило бы мне получить доступ к параметрам теста, скажем, из моего SetUp
метод, чтобы я мог сделать свои тесты более декларативными (основанными на соглашениях) и менее повторяющимися?
(TestContext
выглядело многообещающе, но он только говорит мне название теста и прошел ли он или нет. Параметры теста вроде бы есть, но только как часть отображаемой строки, а не как реальные объекты; Я не могу взять объект стратегии и начать вызывать на нем методы.)