27

ここや他の場所でこれについて投稿している人々を見てきましたが、うまくいく解決策は見つかりませんでした. 私は XCode 4.4 を使用しており、多数の単体テストをセットアップしています。このプロジェクトで以前にそれらをすべて実行したことがあるので、実際に実行された場合、想定されているときに合格/失敗することを知っています。

約 15 個のテスト スイートがあり、それぞれに 1 ~ 7 個のテストが含まれています。ほとんどの試行で、1 つ (FooTests) を除いて、すべてのテスト スイートが終了 (および合格) しました。次の警告が表示されます。

FooTests did not finish
    testFoo did not finish

XCode は、未完了のテストで何が起こっても、テストが成功したことを報告します。別のテストが終了しない場合もあれば、複数のスイートが終了しない場合もあります。すべてのテストが終了するケースに気付いていませんが、この一見ランダムな動作から判断すると、可能であると考えています。

では、これは XCode のバグですか? テストがランダムに終了せず、XCode がすべてが成功したと報告する原因となる他の理由は考えられません。解決策はありますか?

4

7 に答える 7

17

私は XCode 4.5.2 を使用しています。アプリケーションの単体テストでは、テスト スイートがあまりにも早く終了し、その前にメイン アプリケーションが正しくロードされない場合、警告が表示されます。次のように、テストの最後にスリープを追加することで、問題を簡単に回避できます。論理単体テストでは発生しません。

 [NSThread sleepForTimeInterval:1.0];
于 2012-12-19T03:45:17.387 に答える
4

XCode46-DP3を使用していますが、テストでこの問題を解決しました。Webサーバーを起動してからhttp呼び出しを実行するいくつかのテストがあります。テストの終了時に、Webサーバーは停止します。先週、これらのテストで「終了しませんでした」という警告が出始めました。私にとっては、これらのテストの最後に次のスリープを追加するのに十分でした(正確にはtearDownに追加しました):

- (void)tearDown {
  [self.httpServer stop];
  [NSThread sleepForTimeInterval:1.0];
  self.httpServer = nil;
  self.urlComposer = nil;
}
于 2012-12-17T10:02:20.557 に答える
4

XC4.5DP4 でこの問題が発生しました。

ループ内でいくつかの作業を行い、ループから外れると何もしないテストがあり、「終了しませんでした」というエラーが発生しました。

テストが終了したことを証明するために、これを最後の行として追加しました。

NSLog(@"done");

「完了」が出力に出力されるだけでなく、Xcode はテストが終了したことを示します。

回避策のようです...考えてみてください。

于 2012-09-12T10:21:18.147 に答える
3

問題は、Xcode が失敗または成功を示すログ メッセージを受信して​​解析するには、テストの終了が速すぎるようです。最後のテスト ケースの実行で 1 秒間スリープすると、確実に機能しましたが、0.0 では機能しませんでした。どのテスト ケースが最後のテスト ケースかを確認するには、[スキーム] ダイアログでテスト アクションを確認します。

単一のメソッドを使用して、別の WorkaroundForTestsFinishingTooFast テスト ケースを作成しました。

- (void)testThatMakesSureWeDontFinishTooFast
{
    [NSThread sleepForTimeInterval:1.0];
}

問題は、テスト ケースを追加すると、このテストが最後に実行されるメソッドであることを確認する必要があることです。これは、テスト ケースの並べ替えが許可されていないため、このクラスを Test アクションから削除および追加することを意味します。一方、テスト バンドル全体を 1 秒だけ遅らせるだけです。

于 2013-05-14T02:02:24.467 に答える
2

Log Navigator にも同じ警告がありました。私はそれを修正しました。

私のプロジェクトでは、プロジェクトの実行用と単体テスト用の 2 つのスキームがあります。

  1. 製品に移動 --> スキームの編集...
  2. スキームピッカーで UnitTest スキームを選択します
  3. 左側の「テスト」アイコンを選択します
  4. デバッガーを LLDB から GDB に変更し、[OK] を押します。
  5. テストは今すぐ終了する必要があります。(私にとってはうまくいきました)
于 2012-09-21T13:57:49.663 に答える
2

私にとっての解決策は、テストがテストしていたアプリの部分からのログ出力をスリム化することでした。アプリ全体で他の出力があったため、xcode はテスト出力を時間内に解析できなかったと思います。

于 2013-05-30T21:46:08.653 に答える
0

I had the same problem running with XCode 4.6, the reason for it, in my case, was inconsistency between the scheme and the actual unit tests in the test suits. In the scheme I had some suits checked but in their .m file some unit tests were commented.

To solve the problem: either uncomment the test or deselected the file/suit in the scheme and all shall became green again :)

for people like me that forgot how to reach the scheme these are the required steps:

  1. right click on the project name in the scheme section (right to the stop button)
  2. choose edit scheme
  3. choose the test debug
  4. click on the triangle next to the unit test project and next to each file you have a check box
  5. uncheck files that you placed unit test in comments

hope this helps

于 2013-03-14T02:09:37.060 に答える