Как заблокировать сообщения об ошибках OCUnit/события/события
Я пытаюсь использовать xcodebuild и OCUnit с сервером Continuous Integration (TeamCity).
JetBrains предлагает реалистичные реализации наблюдателей для boost:: test и CppUnit, которые выводят результаты тестирования формата таким образом, что TeamCity может интерпретировать. Мне нужно сделать что-то подобное для OCUnit, если я хочу его использовать.
В OCUnit, похоже, есть класс SenTestObserver, но я не знаю, как именно он должен использоваться, а Домашняя страница OCUnit. t, похоже, предоставляют какую-либо документацию по этому вопросу.
Ответы
Ответ 1
Вы можете написать своего собственного наблюдателя, расширив класс SenTestObserver и внедряя прослушиватели уведомлений
- (void) testSuiteDidStart: (NSNotification *) aNotification
- (void) testSuiteDidStop: (NSNotification *) aNotification
- (void) testCaseDidStart: (NSNotification *) aNotification
- (void) testCaseDidStop: (NSNotification *) aNotification
- (void) testCaseDidFail: (NSNotification *) aNotification
затем добавьте запись в info.plist SenTestObserverClass с именем вашего класса.
По крайней мере, в версии OCUnit, я знаком с SenTestObserver, равные части полезны/равны части. Я просто пропустил его полностью и зарегистрировался для уведомлений сам в своем классе. (см. SenTestSuiteRun.h и SenTestCaseRun.h для определения имен уведомлений).
Вы можете использовать тестовые и запускаемые свойства уведомления для доступа к экземплярам SenTestSuite и SenTestSuiteRun, а экземпляр запуска содержит информацию, необходимую для фактических результатов.
Ответ 2
Я реализовал простой Teamcity Adapter, вы можете посмотреть здесь . SenTestObserver не точно разбит, он просто не придерживается лучших практик:
Это то, что вам нужно вызвать в подклассе Observer, чтобы он был правильно зарегистрирован:
+(void)initialize
{
[[NSUserDefaults standardUserDefaults] setValue:@"TeamCityAdapter" forKey:@"SenTestObserverClass"];
// we need to force SenTestObserver to register us as a handler
// SenTestObserver is properly guarding against this invocation so nothing bad will hapen
// but this is required (bad design on SenTestObserver side)...
[super initialize];
}
поскольку инициализация SenTestObserver выглядит следующим образом:
+ (void) initialize
{
if ([self class] == [SenTestObserver class]) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *registeredDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
@"SenTestLog" , @"SenTestObserverClass",
nil];
[defaults registerDefaults:registeredDefaults];
[NSClassFromString ([defaults objectForKey:@"SenTestObserverClass"]) class]; // make sure default observer is loaded
}
if ([[[NSUserDefaults standardUserDefaults] objectForKey:@"SenTestObserverClass"] isEqualToString:NSStringFromClass(self)]) {
[self setCurrentObserver:self];
}
}
Я надеюсь, что это поможет другим людям найти адаптер для командной строки для OCUnit/SenTestingKit.