Допустим, у меня есть следующие структуры класса:методы тестирования блока, которые используют глобальные переменные
private string GlobalVariable = "foo";
public void MainMethod()
{
string bar = Baz();
}
public string Baz()
{
return GlobalVariable + "qux";
}
Я желаю, чтобы провести тест на единичную Baz()
, используя различные значения для GlobalVariable
. Однако, поскольку GlobalVariable
просто вызывается внутри метода и не передается ему в качестве параметра, я не могу установить это в своем модульном методе тестирования.
Поэтому я рассмотрел изменения моей структуры:
private string GlobalVariable = "foo";
public void MainMethod()
{
string bar = Baz(GlobalVariable);
}
public string Baz(string globalVar)
{
return globalVar + "qux";
}
Таким образом, теперь я могу изменить значение параметра globalVar
в моих модульных тестах для проверки различных выходов.
Однако моя первая структура более чистая, так как я не излишне передаю значения переменных методам в качестве параметров.
Есть ли способ получить лучшее из обоих миров, не препятствуя моей структуре для проведения модульных тестов?
Нет ... поэтому статические классы трудно проверить. Как вы уже выяснили, глобальное состояние плохо тестируется. –
Подождите .. это статическое? Что определяет «глобальный» в вашем примере? –
Я думаю, вопрос в том, как/почему изменился бы ваш «GlobalVariable» при использовании в реальном мире? Если это не так, вам действительно нужно проверить его? Если он изменит, то каким механизмом и проверит этот механизм. – Belogix