2010-07-25 2 views
2

Нужно ли модулю тестировать объект значения и как вы это сделаете?Единичное тестирование объекта значения

Возьмем, например, этот объект:

public class TeamProfile 
{ 
    public string Name { get; set; } 

    public int Wins { get; set; } 
    public int Losses { get; set; } 
    public int Draws { get; set; } 
} 
+2

Что вы бы описали? Вы верите, что компилятор будет генерировать правильный код? Если это так, здесь для тестирования существует нулевое поведение. Вы также можете протестировать raw 'int'. – jalf

ответ

3

Ответ - мнение. Я бы сказал НЕТ. Но такие вопросы действительно возникают в повседневной работе, и я понимаю вопрос, поэтому позвольте мне высказать еще какое-то мнение:

Я бы судил, основываясь на конкретной ситуации. Если вы считаете, что мои модульные тестовые процедуры проверяют все это (и полагаются на него), и вы видите, что вероятность того, что выше процедуры может когда-либо измениться к чему-то более сложному, тогда ответ будет ДА. Вопросы, подобные этим, я иногда отвечаю «ДА», чтобы узнать, через какое-то время это было действительно излишним. Затем, в других случаях, я сужу о том, что «о, ни один человек, это действительно слишком сложно», чтобы узнать позже, что есть тот аспект, о котором я никогда не думал.

Как проверить его? Как и все тестовые примеры: Определите ввод и ожидаемый результат. Установить его. Возьми. Проверьте, есть ли у вас то, что вы установили.

2

Я не думаю, что это «надо» само по себе, но это не охранник вы в случае, если вы добавляете логику ваших сеттеров в какой-то момент (например, метание исключение, когда предпринимаются отрицательные попытки Wins/Losses/Draws, поскольку вы не используете unsigned ints).

Как проверить его? Просто: вызовите сеттера, вызовите геттер, убедитесь, что значение - это то, что вы храните, или вы выбрали исключение.

0

Это может быть сделано, но полностью бесполезно ИМО.
Объекты Value не содержат абсолютно никакой логики, и поэтому тестирование их - это потраченное впустую усилие (и почти все другие тесты будут ломаться, если ваши объекты значений будут сломаны, если вы их не издеваетесь).

0

Я не тестирую короткие свойства стиля. Код позади автоматически генерируется компилятором, поэтому я не вижу, почему я должен их тестировать.

Просто имейте в виду добавить отсутствующий тест, как только вы измените подпись подписи.

1

Я бы испытал функциональность, которая больше, чем просто получить/установить. Например, объекты значений должны переопределять Equals и GetHashCode.

Если вы думаете об модульном тесте как закодированной функциональной спецификации, это может помочь вам придумать те тесты, которые необходимы. (Если у вас действительно есть функциональная спецификация, то это хороший источник для определения модульных тестов.)

1

Существует отличная статья по объектам Value и их внедрение и тестирование Dan Bergh Johnsson http://www.infoq.com/presentations/Value-Objects-Dan-Bergh-Johnsson

Для ясности я должен повторить, что приведенный пример является не объект значение. http://martinfowler.com/bliki/ValueObject.html

Это не специально либо команда, сообщение или скорее объект передачи (DTO) Данные Как уже упоминалось выше, при условии, класс имеет никакого поведения, чтобы проверить.

Смежные вопросы