Когда у вас есть длинный устаревший метод, который выполняет X (и, возможно, Y и Z из-за его размера), реальный трюк - не сломать приложение, «исправив» его. Тесты унаследованного приложения имеют предусловия и постусловия, поэтому вы должны действительно знать их, прежде чем разбивать его. Тесты помогают облегчить это. Как только вы разбиваете этот метод на два или более новых метода, очевидно, что вам необходимо знать предварительные / последующие состояния для каждого из них, и поэтому тесты для тех, кто «держит вас честными» и позволяют вам спать лучше ночью.
Я не слишком беспокоюсь о 1/10 секунды утверждения. Скорее, цель, когда я пишу модульные тесты, состоит в том, чтобы охватить все мои основы. Очевидно, что если тестирование занимает много времени, это может быть связано с тем, что то, что тестируется, - это просто слишком много кода, выполняющего слишком много.
Суть в том, что вы определенно не хотите брать то, что предположительно является работающей системой, и «исправлять» ее до такой степени, что она иногда работает и дает сбой при определенных условиях. Вот где тесты могут помочь. Каждый из них ожидает, что мир будет в одном состоянии в начале теста и новое состояние в конце. Только вы можете знать, правильны ли эти два состояния. Все тесты могут «пройти», и приложение все еще может быть не в порядке.
Каждый раз, когда код изменяется, тесты могут измениться, и, вероятно, потребуется добавить новые, чтобы учесть изменения, внесенные в производственный код. Эти тесты работают с текущим кодом - не имеет значения, нужно ли изменять параметры, все еще существуют условия до / после, которые должны быть выполнены. Очевидно, недостаточно просто разбить код на более мелкие куски. «Аналитик» в вас должен уметь понимать систему, которую вы строите - это первая работа.
Работа с устаревшим кодом может быть настоящей рутиной в зависимости от того, с каким «беспорядком» вы начинаете. Я действительно считаю, что знание того, что у вас есть и что он должен делать (и действительно ли он делает это на шаге 0, прежде чем вы начнете рефакторинг), является ключом к успешному рефакторингу кода. Одна цель, я думаю, заключается в том, что я должен быть в состоянии отбросить старые вещи, поставить свой новый код на место и заставить его работать так, как рекламируется (или лучше). В зависимости от языка, на котором он был написан, предположений, сделанных первоначальным автором (авторами), и способности инкапсулировать функциональность в отдельные блоки, это может быть реальным приемом.
Удачи!