Для примера кода, который вы представляете, я не буду беспокоиться о насмешках над NSNumberFormatter. Вы пытаетесь проверить, что [StringNumber returnStringFromNumber:]
возвращает соответствующую строку. В этом случае вашему тесту не должно быть важно, какой метод он использует для вычисления этой строки, просто ваш метод работает так, как задумано.
Поскольку вы просто возвращаете значение, возвращаемое numberWithFloat:
, а NSNumberFormatter является служебным классом, вы не должны его высмеивать. Затем, если в будущем поведение numberWithFloat:
изменится, ваш тест не пройден, и вы можете решить, следует ли изменить тест или изменить реализацию.
Если вы имитируете NSNumberFormatter, вы в основном просто проверяете, что ваш метод вернет независимо от того, он вернется, поэтому, если его поведение изменится, поведение вашего класса тоже изменится, и вы не будете знать это (во время теста).
Я склонен использовать насмешки, чтобы:
- исключить зависимость, которая зависит от конкретной среды / конфигурации / набора данных
- исключить зависимость, которая не будет работать во время теста
- проверка поведения моего класса для различных случаев поведения зависимого кода (например, когда зависимость возвращает ноль, когда зависимость возвращает отрицательное значение, когда зависимость вызывает исключение и т. Д.)