Я выполнил "Метод замены с рефакторингом" Объекта Метода, описанным Beck.
Теперь, у меня есть класс с "выполненный ()" метод и набор функций членства, которые разлагают вычисление на меньшие единицы. Как я тестирую те функции членства?
Моя первая идея состоит в том, что мои модульные тесты являются в основном копиями "выполненный ()" метод (с различными инициализациями), но с утверждениями между каждым вызовом к функциям членства для проверки состояния вычисления.
(Я использую Python и unittest модуль.)
class Train:
def __init__(self, options, points):
self._options = options
self._points = points
# other initializations
def run(self):
self._setup_mappings_dict()
self._setup_train_and_estimation_sets()
if self._options.estimate_method == 'per_class':
self._setup_priors()
self._estimate_all_mappings()
self._save_mappings()
def _estimate_all_mappings():
# implementation, calls to methods in this class
#other method definitions
У меня определенно есть ожидания о том, чем состояния членских атрибутов должны быть прежде и после вызовов к различные методы как часть реализации run()
метод. Я должен делать утверждения об этих "частных" атрибутах? Я еще не знаю как к unittest эти методы.
Другая опция состоит в том, что я действительно не должен тестировать их.
Я отвечу на свой вопрос.После небольшого чтения и размышлений я считаю, что мне не следует проводить модульное тестирование этих частных методов. Мне нужно просто протестировать публичный интерфейс. Если частные методы, выполняющие внутреннюю обработку, достаточно важны для независимого тестирования и не являются просто совпадением с текущей реализацией, то, возможно, это признак того, что их следует реорганизовать в отдельный класс.