2017-01-25 2 views
0

У меня есть функция, которая вычисляет информацию внутри объекта (скажем myFunctionThatIWantToTest()). Мой главный вопрос: если я пишу тест для этой функции, должен ли я сохранить пример объекта для запуска вычисления или создания заглушки?Когда использовать mock против сохраненного объекта в тесте

Я спрашиваю, что объект функция работает от того, содержит сложную большую структуру, которая является результатом более сложных вычислений, например:

object = functionA(object) обновляет объект, создавая большую таблицу чисел и других результатов

result = myFunctionThatIWantToTest(object) использует тот большой стол, чтобы получить мой результат

Я новичок в TDD, так вот почему я немного не уверены о том, как продолжить. Что делают люди? Вы сохраняете образец объекта или делаете заглушку.

ответ

1

ОБНОВЛЕНИЕ - На основании вашего недавнего изменения на вопрос: используйте макет. Если вы используете реальный экземпляр, то утверждения в тестовом коде, будет зависеть не только от функции вы проверяете, но и на functionA имея правильно поставить объект в состоянии вы думаете, что в.


оригинальный ответ:

Ответ пуриста: используйте макет объекта. Тест не должен зависеть от какого-либо кода, кроме кода, который вы тестируете.

Ответ прагматика немного сложнее: вам, вероятно, следует использовать макет, особенно если вы сомневаетесь. Но иногда бывает нормально использовать экземпляр реального объекта, если вы можете быть уверены, что ничто в коде этого объекта не повлияет на результат теста. (И, конечно, если этот объект не собирается втягивать кучу другого кода или делать то, что делает пробный прогон длинным и т. Д.)

Случай, когда я использую реальные объекты, - это когда объект просто хранит данные. Нулевые логики и сеттеры, это нормально; ничего более, возможно, лучше использовать макет. Если объект содержит другие методы, но тест не использует их ... ну, это серая область, но я склоняюсь к использованию макета.

+0

Спасибо, что нашли время ответить! это полезно. – user1496710

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