Re: Тестирование приватных методов класса - за/против?
От: xy012111  
Дата: 07.08.15 07:07
Оценка:
Здравствуйте, another_coder, Вы писали:

_>Я считаю тестирование приватных методов плохой практикой. В данный момент, для меня это однозначное зло, но я не хочу быть "зашоренным". Поэтому, хочу задать вопрос....


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

Потому что, допустим, есть у вас собственный метод какой-то сортировки. Он используется в публичных методах, но через них нет возможности как следует протестировать сортировку. Как быть? Делать сортировку публичной? А ну как завтра придётся изменить как-то её или вообще отказаться от сортировки? Удаление метода из публичного АПИ не самая простая операция. Сложнее удаления приватного.

Приватность или публичность методов — это вопрос инкапсуляции, который, вообще говоря, никак не пересекается с необходимостьючто либо протестировать. Можно искусственно завести правидло — тестировать только открытое АПИ, но при этом могут возникнуть различные проблемы. И придётся или отходить от правила, или выносит в открытое АПИ, то чему там, может быть, и не место.

Просто не следует возводить подобное правило в догму, и если где-то нужно протестировать нечно закрытое, то подумать так и сяк и может быть, протестировать.

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

  1. Попробовать через этот единственный метод протестировать всё что только можно
  2. Потестрировать какие-то приватные методы, отрабьотав большую часть кейсов на них более конкретно

Путь a) теоритически более верный, но на практике обычно оказываетсядостаточно сложным. Много кейсов нужно продумать и в случае упавшего теста не так просто бывает определить, что же конкретно не раюотает — где в реализации что пошло не так.

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

Просто посомтрите и в каждом конкретном случае решайте по-своему, каким путём пойти в зависимости от тяжести последствий, например. От имеющегося времени. Так же не забывайте, что сегодня сделав б), завтра ничто не мешает сделать a)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.