Есть ли способ получить доступ к параметрам текущего теста (кроме самих параметров)?

Если я напишу параметризованный тест 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 выглядело многообещающе, но он только говорит мне название теста и прошел ли он или нет. Параметры теста вроде бы есть, но только как часть отображаемой строки, а не как реальные объекты; Я не могу взять объект стратегии и начать вызывать на нем методы.)

0 ответов

Другие вопросы по тегам