Как делают меня модульный тест деталь реализации как кэширование

Как насчет использования [(exp для x в iter)], чтобы получить пользу от обоих. Производительность от понимания генератора, а также методов списка

6
задан jpoh 2 July 2009 в 04:16
поделиться

2 ответа

Я считаю кэширование ортогональным Do (ing) Stuff. Я бы нашел способ вывести логику кеширования за пределы метода, либо изменив SomeDependency, либо как-то обернув ее (теперь у меня есть классная идея для класса кеширования, основанного на лямбда-выражениях - yum).

Таким образом, ваши тесты для DoStuff не нужно менять, вам нужно только убедиться, что они работают с новой оболочкой. Затем вы можете независимо протестировать функциональность кеширования SomeDependency или его оболочки. С хорошо спроектированным кодом установка уровня кэширования должна быть довольно простой, и ни ваша зависимость, ни ваша реализация не должны знать разницы.

Модульные тесты не должны тестировать реализацию, они должны тестировать поведение. В то же время, испытуемый должен иметь узко определенный набор поведения.

Чтобы ответить на ваш вопрос, вы используете динамический макет, а поведение по умолчанию - разрешить любой вызов, который не настроен. Дополнительные вызовы просто возвращают "0". Вам необходимо настроить ожидание того, что больше не будет вызовов к зависимости:

depend.Expect(d => d.GrabValue()).Repeat.Once().Return(1);
depend.Expect(d => d.GrabValue()).Repeat.Never();

Вам может потребоваться войти в режим записи / воспроизведения, чтобы заставить его работать должным образом.

5
ответ дан 10 December 2019 в 00:42
поделиться

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

Итак, тесты - и запахи - говорят нам, что нам нужен новый класс. Дизайн, основанный на тестах. Разве это не здорово?

5
ответ дан 10 December 2019 в 00:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: