18

注: 「GHUnit を使用する」は、この質問に対する適切な回答ではありません。GHUnit は Xcode4 OCUnit よりも優れていると考える人がほとんどだと思いますが、それは私が求めていることではありません。別途評価いたします。

Xcode4でゼロから作成したXcodeプロジェクトがあり、作成時に「単体テストを含める」チェックボックスがオンになっています。以前のプロジェクトで開発したいくつかのライブラリも含めました。これらは、[ファイルを x に追加...] ダイアログを介してプロジェクトに追加され、アプリケーション ターゲット (テスト ターゲットではなく) にのみ追加されました。アプリケーションを実行すると問題なく動作するので、正しく設定されていると思います。また、このプロジェクトのために書かれたさまざまなクラスもいくつかあります。

私のテスト ファイルは、[AppName]Tests.h および .m という名前の標準的な方法でセットアップされています。
ヘッダーのコード:
#import < SenTestingKit/SenTestingKit.h >

@interface [AppName]Tests : SenTestCase {
@private
}
@end

実装のためのコード:
#import "[AppName]Tests.h"

@implementation [AppName]Tests

- (void)setUp
{
    [super setUp];
    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.
    [super tearDown];
}  
// Test methods go here
@end

これはまさに基本的な骨格です。他のファイルをインポートしない限り、他のプロジェクトでもこのプロジェクトでも問題なく動作します。このプロジェクトから別のファイルをインポートして使用すると、Xcode 出力ログに次のエラーが表示されます。
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

私はすでにそれを確認しました:

  1. 私が使用するすべてのフレームワークは、アプリ ターゲットとテスト ターゲットの両方について、「Link Binary with Libraries」に追加されています。
  2. テスト ターゲットは正しくビルドされるように構成されており、すべてのテスト メソッドが [スキームの編集...] -> [テスト] -> [テスト] に表示されます。
  3. この問題を除くすべての問題は解決されており、コンパイラ エラーはありません。
  4. ここで説明するすべての設定は 正しく設定されており、正しくテストされる私の他のプロジェクトと同じです。

これを引き起こしている可能性のあるものについて何か考えはありますか?

4

9 に答える 9

13

単体テストターゲットの「TestHost」プロパティをに設定する必要がありました$(BUNDLE_LOADER)。それで私の問題は解決しました!

于 2012-09-12T18:00:04.453 に答える
7

私は次のことを行いました:
http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

Test_Hosts = $(BUNDLE_LOADER)を詳しく見てみましょう

Test_Hosts を設定すると、まったく同じ問題が修正されました。

于 2012-10-02T15:30:38.033 に答える
7

これと同様のエラーで何時間も無駄にしました-メインターゲットの名前を変更したことが判明しました-関連する変数の名前を変更し、DerivedDataディレクトリ全体を削除してこれを修正しようとしても失敗しました。

最終的には、次の手順に従って新しいユニット テスト ターゲットをセットアップするだけです

そして、今はすべて順調です。

そのため、奇妙で説明のつかないリンク エラーが発生した場合は、新しい単体テスト ターゲットを作成した方がよい場合があります。わずか2分。

于 2012-03-03T17:53:38.690 に答える
4

単体テストの実行中にリンカー エラーが発生した場合、2 つの方法で問題を解決できます。最初の解決策は、Test After Build ビルド設定を YES に設定し、Product > Build For > Build For Testing を選択してテストを実行することです。このソリューションは、実装がより簡単です。

2 番目の解決策は、アプリケーションの実装ファイルを単体テスト ターゲットに追加することです。[表示] > [ユーティリティ] > [ファイル インスペクター] を選択して、ファイル インスペクターを開きます。プロジェクト ナビゲーターで実装ファイルを選択します。ファイル インスペクターで単体テスト ターゲットの横にあるチェックボックスを選択します。

シミュレーターで実行されている iPhone アプリケーションの場合、Test Host ビルド設定が空白であることを確認してください。シミュレーターは、アプリケーションがホストする単体テストをサポートしていません。

于 2011-06-07T18:47:34.240 に答える
1

私はかつてこの同じ問題を抱えていました。何らかの理由で、プロジェクトのソース ファイルの 1 つがテスト ターゲット用にコンパイルされるように含まれていたため、このリンク エラーが発生しました。

テスト実装ファイルのみがコンパイルされていることを確認することで、このエラーを解決できるはずです。これは次の場所で確認できます。

TestTarget -> ビルド フェーズ -> ソースのコンパイル

于 2012-01-20T12:28:49.363 に答える
1

Xcode 4.5.2 を実行しているときにこのエラーが発生しました - 2012 年 11 月です - 上記のどれも機能しませんでした。バンドル ローダーとテスト ホストを設定すると、プロジェクトのすべての依存関係が埋められることになっているようです。または、アプリの環境などでテストを実行することもできますが、残念ながらうまくいきませんでした。それが行ったことは、どのファイル/ライブラリが欠落しているかについての特定の Xcode 警告を防ぐことでした。

私にとってうまくいったのは、新しいターゲットを追加することでした:ココアタッチユニットテスト(バンドルローダーとテストホストのビルド設定が空であることを確認します)、ビルドエラーを監視し、不足している依存関係を手動で追加します-すべてのソースファイルを1つずつ必要だった私のプロジェクト、そしてフレームワーク。あまりエレガントではありませんが、うまく機能してよかったです。この GHUnit ライブラリをまだ試していない理由がわかりません。

于 2012-11-20T05:01:44.857 に答える
0

この質問はかなり古いことは承知していますが、私はしばらくの間同じ問題に苦労し、最終的にそれを解決することができたので、私が見つけたものを共有させてください。

私はiOSからMacにアプリを移植してきましたが、プロジェクト自体はiOS用に作成されたため、プロジェクトとメインターゲットの両方でサポートされているプラ​​ットフォームにiOSがありました。さて、移植を始めたとき、Mac用の新しいターゲットを作成し、サポートされているプラ​​ットフォームをそのターゲット専用のOSXに変更しました。その後、単体テスト用の別のターゲットを作成しましたが、サポートされているプラ​​ットフォームをiOSからMacに変更するのを忘れていました。問題が何であるかはすでに知っているはずです。基本的に、単体テストターゲットはデフォルトでCocoaフレームワークにリンクされているため、このターゲットでサポートされているプラ​​ットフォームはiOSのみであるため、cocoaフレームワークは構築されず、適切にリンクされませんでした。サポートされているプラ​​ットフォームをテストターゲットのOSXに変更すると、問題が修正されました。

これはiOSのテストターゲットにはあまり役立たないかもしれませんが、少なくともテストターゲットの[バイナリとライブラリのリンク]セクションに移動して、赤いライブラリがあるかどうかを確認してください。これは私にアイデアを与えました、多分それはあなたの何人かを助けるでしょう。

于 2012-09-07T15:07:15.453 に答える
0

テスト ターゲットにアプリ ターゲットが依存関係として構成されていることを確認します (ビルド フェーズ -> ターゲット依存関係)。

于 2011-06-21T00:20:13.607 に答える