37

XCode 5 プロジェクトに 2 つのテスト クラスがあります。

ABCDataModelTests.{h,m}

- (void)testAlwaysPassing { ... }

ABCDataModelTests を継承する ABCDataModelListColorsTests.m。

- (void)testNumberOfListColorsGreaterThan7 { ... }

テストを実行すると、図に示すように、サブクラスのテストの下に "rT" という記号があることに気付きました。

「rT」は何の略ですか?サブクラスがテスト メソッド「testAlwaysPassing」を継承していることに注意してください。

「XCode 5/5.0.1 の新機能」に関する Apple ドキュメントに何も見つかりません。すべての記号が何を表しているかについてのドキュメントはありますか?

ここに画像の説明を入力

4

5 に答える 5

11

面白い。IDE で別のファイルを複製して作成したテスト クラスと同じ問題に悩まされています。以前に他のテストファイルを複製したことがあるので、それは問題ではないようです。

テストクラスにはその中にテストが1つしかなく、紫色のアイコンの別の副作用とランタイムテストとしての分類は、他のテストのテストランナーで提供される小さな三角形のアイコンでテストをトリガーできないことですまたはテストクラス。

テスト エクスプローラーのコンテキスト メニューには、テストを実行しているように見える Test "testBlah" が用意されています。

XCode を終了し、xcuserdataフォルダを削除して再構築すると、テストは再び通常のテストとして認識されました。

以前はキャッシュに問題があり、ローカル コンテキスト データを定期的に削除する必要があった古い Visual Studio バージョンのリマインダーを受け取っています。

于 2013-11-15T09:02:22.107 に答える
1

@everyday_productive が言ったことに同意します

「rT」は通常、インデックス作成に問題があることを意味します。これを修正するには、ターミナルに移動して次のように入力します。

$ cd ~/Library/Developer/Xcode/

Xcode が終了していることを確認してから、「Derived Data」フォルダーを削除します。

于 2016-05-23T04:27:36.617 に答える
1

派生データを削除しても、これらのテストの実行をやめることはできませんでした。そこで、小さなカテゴリを作成しましたが、うまくいきましたXCTestCase

#import "XCTestCase+TestCaseSwizzling.h"
@import ObjectiveC.runtime;

static NSMutableSet* alreadyRunTests = nil;

@implementation XCTestCase (TestCaseSwizzling)

+ (void)load
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{

    alreadyRunTests = [NSMutableSet set];

    Class class = [self class];

    SEL originalSelector = @selector(invokeTest);
    SEL swizzledSelector = @selector(swizzledInvokeTest);

    Method originalMethod = class_getInstanceMethod(class, originalSelector);
    Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);

    method_exchangeImplementations(originalMethod, swizzledMethod);
});
}

- (void)swizzledInvokeTest
{
     NSString* selectorString = NSStringFromSelector(self.invocation.selector);

     if (![alreadyRunTests containsObject:selectorString])
     {
         [alreadyRunTests addObject:selectorString];
         [self swizzledInvokeTest];
     }
 }

 @end
于 2016-08-10T12:04:33.463 に答える