В данный момент я работаю над некоторыми тестовыми примерами и регулярно обнаруживаю, что в каждом случае я получаю несколько утверждений. Например (слишком упрощенно и комментарии для краткости):
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance = new MyClass("Test name");
Assert.AreEqual("Test Name", myInstance.Name);
}
Это выглядит приемлемо в принципе, но смысл теста в том, чтобы убедиться, что когда экземпляр класса создается с заданным именем, свойство Name установлено правильно, но оно не работает, если что-то пойдет не так при создании экземпляра, прежде чем он даже добирается до утверждения.
Я рефакторинг это так:
[Test]
public void TestNamePropertyCorrectlySetOnInstantiation()
{
MyClass myInstance;
string namePropertyValue;
Assert.DoesNotThrow(() => myInstance = new MyClass("Test name"));
Assert.DoesNotThrow(() => namePropertyValue = myInstance.Name);
Assert.AreEqual("Test Name", namePropertyValue);
}
но, конечно, сейчас я на самом деле тестирую три вещи здесь; В этом тесте меня не интересует проверка того, был ли успешно создан экземпляр MyClass или что свойство Name было прочитано успешно, они проверяются в другом случае. Но как я могу проверить последнее утверждение, не утвердив сначала два других, учитывая, что невозможно даже выполнить тест, если первые два не пройдены?