web-dev-qa-db-ja.com

Xcode 7テストは実行されませんが、成功を報告します

プロジェクトにテストターゲットを追加しようとしていますが、テストを実行すると実際のテストが実行されていないようですが、代わりにXcodeは常に成功を報告しますが、テストに合格したかどうかを示す小さな四角が残っています晴れ。

私は1つのテストターゲットと1つのクラスしか持っていません。

@implementation Tests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    // Use XCTAssert and related functions to verify your tests produce the correct results.
    XCTAssert(false, "");
}

- (void)testPerformanceExample {
    XCTAssert(false, "");
}

@end

テストは失敗するはずですが、成功を示すポップアップが表示されます。また、テストレポートにはテストがないと記載されています。

テストを個別に実行しようとすると、テストは「成功」しますが、レポートに関する情報が得られず、正方形は空のままです。

それを修正する方法についてのアイデアはありますか?

33
Emanuel

IOS用にビルドしている場合、通常、物理デバイスで実行するようにXcodeを設定していますか?その場合は、iOSシミュレーターで実行するように設定してみてください。

物理デバイスでXcode 7を設定している場合、ユニットテストは説明したとおりに動作することがわかりました。ユニットテストのために一時的にiOSシミュレーターで実行するようにXcodeを設定すると、問題がすぐに修正され、魅力的に機能します。

これが同じ問題に遭遇している人を助けることを願っています。 :D

22

この問題に直面している他の人は、テストクラスがXCTestではなくXCTestCaseから継承されていることを確認してください。間違ったクラスから継承していることに気づくまで、私はこれらすべてのソリューションを試すことに夢中になりました。 Xcodeは文句を言わず、単にテストを実行せずに成功したと言うだけです。これが誰かを助けることを願っています。

25
faircloud

Xcodeは、「test」で始まるXCTestCase関数のみを実行します。これは他のプラットフォームに反しており、iOSでテストを開始したときに混乱しました。

次のクラスでは:

_class MyBigTest: XCTestCase {

    func testSensibleInputReturnSensibleAnswer() {
        XCTAssert(/* stuff */)
    }

    func someOtherTest() {
        XCTAssert(/* some other stuff */)
    }
}
_

testSensibleInputReturnSensibleAnswer()のみが実行されます。

15
huwr

IOSデバイスの電源をオフにしてから、再びオンにします。 Xcodeがデバイスとの通信を再確立できるように、USBケーブルを取り外して再接続することもできます。これが私に起こったとき、テストは実行されたことがないテストがすぐに成功したことを報告します。また、新しいUIテストアクションを記録しようとすると、Xcodeが毎回クラッシュする-iOS設定-開発者-UIオートメーション設定を最初に有効にする前の動作と同様に、iOSデバイスの再起動が必要であることを思い出したこれが有効になっていると、iOSデバイスの再起動を試み、Xcodeが再び動作し始め、iOSデバイスに対してテストを正常に記録および実行できました。完全な開示:iOSデバイスを再起動する前に、「UIオートメーションを有効にする」のオンとオフを切り替えましたが、それが必要だったとは思いません。 -rrh

10
Richie Hyatt

コンソールを確認します(Command-Shift-Y)。

私の場合、テストが実行されなかった理由を示す出力が印刷されていました。 (動的フレームワークのプリフライトチェックは失敗していました。)しかし、デバッグ領域が縮小されていたため、確認できませんでした。

また、私の場合、説明されているようにランタイム検索パスに$(PROJECT_DIR)/Carthage/Build/iOSを追加することで問題が修正されました here

9
funroll

古い質問ですが、私の場合それを解決したものはここでまだ言及されています:

(常に?)テストクラス/ケースの名前を変更することはできません。新しいクラス/ケースを作成し、古いものを捨てます。

2
Departamento B

同じ問題があり、ビルドフォルダーをクリーニングすると解決します。ただし、Product -> Perform Action -> Test Without Buildingを実行するさらに高速な方法があります。

2
jjramos

FWIW KIFのbeforeAllを使用すると、非常によく似た問題が発生しました。 beforeAll内に配置されたコードが機能しない場合もあり、テストは成功として返されます。

Xcodeがクラッシュすることもあります。 KIFのGithubページ here を参照してください。問題の原因はKIFではなくXCTest自体にあると指摘する人もいますが

一時的な解決策は、beforeAllの使用を避け、代わりにbeforeEachを使用することでした。

1
Honey

これがUI自動化テスト用である場合は、アプリケーションを初期化して起動していないことが原因である可能性があります。

XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
1

作成時にこの状況に遭遇しましたObjective-C test class既存のSwiftクラスと同じ名前。

テストファイルの名前を変更するだけです

0
yoAlex5

テストメソッドにprivateのマークを付けましたが、それを解決したのはprivateアクセス修飾子を削除するだけでした。

0
shoe