首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获OCUnit测试通过/失败消息/事件

如何捕获OCUnit测试通过/失败消息/事件
EN

Stack Overflow用户
提问于 2008-10-29 17:05:03
回答 2查看 1.5K关注 0票数 10

我正尝试在我的持续集成服务器(TeamCity)中使用xcodebuild和OCUnit。

JetBrains为boost::test和CppUnit提供了测试观察器实现,这些实现以TeamCity可以解释的方式格式化测试输出。如果我想使用OCUnit,我需要做一些类似的事情。

在OCUnit中似乎有一个SenTestObserver类,但是我不知道它到底应该如何使用,而且OCUnit homepage似乎没有提供任何关于这个问题的文档。

EN

回答 2

Stack Overflow用户

发布于 2008-12-01 00:25:35

您可以通过扩展SenTestObserver类并实现通知侦听器来编写自己的观察器

aNotification

  • (void) aNotification

  • (void) (
  • (TestSuiteDidStart) testSuiteDidStart:(NSNotification *) void testSuiteDidStop:(NSNotification *) void testCaseDidStart:(NSNotification *) void testCaseDidStop:(NSNotification *) void testCaseDidFail:(NSNotification *) void

然后在info.plist SenTestObserverClass中添加一个带有您的类名的条目。

至少在我熟悉的OCUnit版本中,SenTestObserver是等分有用/等分坏的。我只是完全跳过它,自己在自己的类中注册通知。(通知名称的定义参见SenTestSuiteRun.h和SenTestCaseRun.h )。

您可以使用通知的测试和运行属性来访问SenTestSuite和SenTestSuiteRun实例,运行实例包含实际结果所需的信息。

票数 5
EN

Stack Overflow用户

发布于 2011-05-27 16:51:05

我已经实现了一个简单的Teamcity适配器,你可以查看gist here。SenTestObserver并没有完全崩溃,它只是没有遵循最佳实践:

这是您需要在观察者子类中调用的内容,以便正确注册它:

代码语言:javascript
复制
+(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的初始化看起来像这样:

代码语言:javascript
复制
+ (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适配器的人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/247607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档