Pull to refresh
1
0
Алексей @acvetkov

User

Send message
Ваня, привет. Спасибо за статью. Хочу высказать свое мнение.

но всё же советовал рассматривать код/методы как «черный ящик»

RubaXa подписываюсь под каждым словом.

Считаю исключительным заблуждением тестирование работоспособности модулей вышеописанным способом.

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

Тестироваться должны исключительно публичные методы, никаких приватных методов, а тем более то, что спрятано в замыканиях (привет, rewire). Почему так? Все просто, мы тестируем работоспособность модуля, а не его реализацию, тестирование приватных данных чревато серьезной завязкой на реализацию, при малейшем изменении все упадет. Такие тесты ничего не тестируют, они проверяют, что код не поменялся. Тестирование исключительно публичных методов дает серьезный маневр для рефакторинга или полного изменения реализации, достаточно оставить сигнатуру публичных методов нетронутой, а тесты проверят, что все по-прежнему работает ожидаемо.

Теперь конкретно про ваш случай.

Поскольку createPostWithTags() изпользует createPost() и addTagToPost() и зависит от результата выполнения этих функций

Когда вы пишете тест — такие рассуждения не совсем корректны. На мой взгляд, правильно рассуждать так:

Когда мы вызываем createPostWithTags у нас должно отправиться 2 post-запроса, один на создание поста, другой на добавления тега. Все, больше никаких рассуждений, тем более о внутреннем устройстве модуля.

Любой тест должен быть определен по правилу: даю данные на вход, получаю ожидаемый результат (сайд-эффект) или ожидаемые данные на выходе.

Чтобы это сделать нам приходится дублировать тест из самого createPost()

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

Код тестов должен быть максимально декларативным, должен содержать минимум логики, и копипаста из других тестов — это вполне ок. Цена ошибки в логике теста очень высока, потому ее надо сводить к минимуму.
Все-таки жизнь вынудила меня посмотреть отрывки из этого блокбастера.
Словами невозможно описать увиденное! Какие же чудовищные события происходят в мире из-за любительского видео без настоящих актеров, без сюжета, с бюджетом, равным паре банок пива. Если бы не весь этот крик, кроме «режиссера» никто бы эту парашу и не посмотрел.

Information

Rating
Does not participate
Location
Ногинск, Москва и Московская обл., Россия
Date of birth
Registered
Activity