Самая большая оборотная сторона - то, что, если Вы действительно хотите сделать TDD правильно, необходимо будет перестать работать много перед следованием. Данный, сколько компаний-разработчиков программного обеспечения работает (доллар на KLOC) Вы будете в конечном счете уволены. Даже если Ваш код является быстрее, более чистым, легче поддержать и имеет меньше ошибок.
, Если Вы работаете в компании, которая платит Вам KLOCs (или реализованные требования - даже если не протестированный) избегают TDD (или кодируйте обзоры, или парное программирование или Непрерывную Интеграцию, и т.д. и т.д. и т.д.).
К сожалению, я тоже не нашел хорошего решения для этого. Лучшее, что я могу сказать, - это попытаться использовать NSError ** как можно меньше, а затем поместить его в изолированную функцию, которую вы можете полностью имитировать на своем частичном макете.
Я нахожу, что любой код, который использует что-либо, кроме NSObject * (или производных) или примитивных значений (NSInteger, BOOL и т. д.), практически невозможно протестировать с помощью OCMock.
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg setTo:nil]];
или
NSError* someError = ...
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg setTo:someError]];
Вы также можете сделать
[[[mock stub] andReturn:someDict] uploadValues:YES error:[OCMArg anyPointer]];
, но это может привести к тому, что ваш код будет неправильно думать, что вы вернули реальную ошибку NSError.