|
Кста, дописывая очередной тест, понял еще один недостаток MI и преимущество композиции. Если исходить из того, что тестами должен быть покрыт весь код (что логично, т.к. если суперкласс проходит набор тестов, это еще не значит, что аналогичные тесты будут 100% проходит и в субклассе), то при написании юнит теста для субкласса мы должны также полностью покрыть всю функциональность, наследуемую им от родителей. При этом, если дальнейшие изменения в суперклассах нарушат тесты данного субкласса, то не очевидно, изменения в каком из них привели к этому, т.к. все суперклассы имеют влияние на результаты тестов.
Если же мы использует композицию, то просто заменяем вложенный класс стабом/моком и забываем про изменения в нем. До тех пор, пока интерфейсные методы этого класса проходят тесты на заявленную функциональность, любые изменения в нем не приведут к нарушениям в использующих его классах. Это не считая того, что таким образом мы сокращаем объем необходимых тестов.
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti
Последний раз редактировалось Saruman; 25.06.2005 в 02:02.
|