10

継続的インテグレーション サーバー ( TeamCity )で xcodebuild と OCUnit を使用しようとしています。

JetBrains は、TeamCity が解釈できる方法でテスト出力をフォーマットする、boost::test および CppUnit のテスト オブザーバー実装を提供します。OCUnit を使用したい場合は、同様のことを行う必要があります。

OCUnit には SenTestObserver クラスがあるようですが、私はそれがどのように使用されるべきかを正確に知りません。また、OCUnit のホームページにはこの問題に関するドキュメントはありません。

4

2 に答える 2

5

SenTestObserver クラスを拡張し、通知リスナーを実装することで、独自のオブザーバーを作成できます。

  • (無効) testSuiteDidStart:(NSNotification *) aNotification
  • (無効) testSuiteDidStop:(NSNotification *) aNotification
  • (無効) testCaseDidStart:(NSNotification *) aNotification
  • (無効) testCaseDidStop:(NSNotification *) aNotification
  • (無効) testCaseDidFail:(NSNotification *) aNotification

次に、クラスの名前で info.plist SenTestObserverClass にエントリを追加します。

少なくとも OCUnit のバージョンでは、SenTestObserver に精通していますが、同じ部分が有用であるか、同じ部分が壊れています。私はそれを完全にスキップして、自分のクラスで自分で通知に登録します。(通知名の定義については、SenTestSuiteRun.h および SenTestCaseRun.h を参照してください)。

通知のテストおよび実行プロパティを使用して、SenTestSuite および SenTestSuiteRun インスタンスにアクセスできます。実行インスタンスには、実際の結果に必要な情報が含まれています。

于 2008-12-01T00:25:34.963 に答える
2

シンプルな Teamcity アダプターを実装しました。ここで要点を確認できます。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'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 アダプターを探している他の人に役立つことを願っています。

于 2011-05-27T08:51:04.680 に答える