У меня есть класс (из многих), который обладает свойствами. У некоторых в них есть логика, а у некоторых нет. Предполагая, что я хочу проверить эти свойства, как мне это сделать?Как (стратегия) для свойств тестового объекта (get/set) в стиле BDD?
В последнее время меня интересует стиль BDD для создания модульных тестов.
Так что я бы сделал настройку контекста - в основном создайте SUT и загрузите все необходимое. Затем в каждом наблюдении (метод тестирования) я проверил бы, что конкретное свойство содержит то, что должно содержать.
Вот мой вопрос. Если у SUT есть 20 свойств, тогда я создаю 20 наблюдений/тестов? Может быть, если один из свойств содержит более интересную логику, я думаю.
[Observation]
public void should_load_FirstName()
{
Assert.Equals<string>("John", SUT.FirstName);
}
[Observation]
public void should_load_LastName()
{
Assert.Equals<string>("Doe", SUT.LastName);
}
[Observation]
public void should_load_FullName()
{
Assert.Equals<string>("John Doe", SUT.FullName);
}
Но было бы лучше, если бы агрегированные простые в одном наблюдении?
[Observation]
public void should_load_properties()
{
Assert.Equals<string>("John", SUT.FirstName);
Assert.Equals<string>("Doe", SUT.LastName);
Assert.Equals<string>("John Doe", SUT.FullName);
}
Или что, если я использовал пользовательский атрибут (который может быть применен несколько раз к методу). Так что я могу возможно сделать, что-то вроде:
[Observation(PropertyName="FirstName", PropertyValue="John")]
[Observation(PropertyName="LastName", PropertyValue="Doe")]
[Observation(PropertyName="FullName", PropertyValue="John Doe")]
public void should_load_properties()
{
}
Поблагодарить за совет. Еще раз, когда ваши сообщения в блоге CallContext помогли мне многое! Я следил за ссылкой на Derived Values на сайте Meszaros и читал об этом (после вашего). Я не уверен, что я бы сделал все возможное, чтобы реализовать его, как вы делали для своего Обратного примера. Я думаю, что у меня есть переменная, expectedResult рядом со входом, а затем просто используйте буквальное значение. В моем случае выше, я слышу вас - это не очевидно, но я загружаю тестовые данные с локального диска, чтобы создать SUT (это тест на прием/взаимодействие). Мне нужно найти лучший способ указать входные значения ... –