我正尝试在我的持续集成服务器(TeamCity)中使用xcodebuild和OCUnit。
JetBrains为boost::test和CppUnit提供了测试观察器实现,这些实现以TeamCity可以解释的方式格式化测试输出。如果我想使用OCUnit,我需要做一些类似的事情。
在OCUnit中似乎有一个SenTestObserver类,但是我不知道它到底应该如何使用,而且OCUnit homepage似乎没有提供任何关于这个问题的文档。
发布于 2008-12-01 00:25:35
您可以通过扩展SenTestObserver类并实现通知侦听器来编写自己的观察器
aNotification
然后在info.plist SenTestObserverClass中添加一个带有您的类名的条目。
至少在我熟悉的OCUnit版本中,SenTestObserver是等分有用/等分坏的。我只是完全跳过它,自己在自己的类中注册通知。(通知名称的定义参见SenTestSuiteRun.h和SenTestCaseRun.h )。
您可以使用通知的测试和运行属性来访问SenTestSuite和SenTestSuiteRun实例,运行实例包含实际结果所需的信息。
发布于 2011-05-27 16:51:05
我已经实现了一个简单的Teamcity适配器,你可以查看gist here。SenTestObserver并没有完全崩溃,它只是没有遵循最佳实践:
这是您需要在观察者子类中调用的内容,以便正确注册它:
+(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's 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的teamcity适配器的人。
https://stackoverflow.com/questions/247607
复制相似问题