Посмотрите, как реализованы макросы STAssert
в OCUnit (SenTestingKit, входит в Xcode).
В вашем собственном модульном тестовом пакете вы могли бы реализовать категорию на NSObject
, чтобы добавить методы, подобные гипотетическому -shouldBeValid
, которые затем вызывали бы тот же механизм прохода / неудачи, что и макросы STAssert
сейчас.
Если вы не очень хорошо знакомы с препроцессором C ...
Возможно, вам также придется использовать #define
для ваших макросов, чтобы пройти правильные значения для __FILE__
и __LINE__
, когда ваши тесты BDD не пройдены. Например, вам может потребоваться сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы бы вызвали это так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет таким:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
Макросы препроцессора __FILE__
и __LINE__
будут расширены до текущего файла и строки в исходном файле теста.
Таким образом, когда у вас есть провальный тест, он может передать соответствующую информацию SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне «Результаты сборки», и, нажав на нее, вы перейдете к точному местоположению ошибки в ваших тестах.