В то время как модульное тестирование мне часто требуется для проверки внутренней (частной) логики, каков наилучший метод для этого? - PullRequest
1 голос
/ 08 марта 2012

Я полагаю, что каждый сталкивается со случаем, когда необходимо проверить внутреннюю проводку класса / объекта. Я знаю, что в скомпилированных языках это можно сделать с помощью условной компиляции. Это то, что я должен делать и для JavaScript? Какой обычный способ выполнить такую ​​задачу? Может быть, я должен просто рассматривать класс / объект как черный ящик и проверять только его результаты?

1 Ответ

2 голосов
/ 08 марта 2012

публичный контракт объекта тестирования (т. Е. Тестирование черного ящика, о котором вы упоминали) в большинстве случаев должно быть достаточно.Надлежащее тестовое покрытие публичных членов должно также выполнять большинство частных / внутренних органов.В конце концов, зачем пользователю вашего класса (будь то другой программист, другие объекты / соавторы) заботиться о том, что ваши объекты делают внутри ?

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

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

Я понимаю, что иногда вам просто нужно протестировать внутреннее устройство - но IMO, тогда лучше остановиться и подумать, сможете ли вы улучшить свой код (очень часто вы узнаете, что действительно можете!),Относитесь к тестированию внутренних органов как к последнему средству, когда все остальное не помогло.

...