申し訳ありませんが、これを理解しようとして約5時間を費やしました。過去のStackoverflowのトピック解決策のどれも私のために働いていなかったので、誰かが私に答えを与え、野生のガチョウを追いかけることはできないと思っています。
問題:カスタムクラスの単体テストが必要なxcodeプロジェクトがあります。私は、iOS SDK 4.2でX-Code 3.2.5を使用しています。いくつかの異なる方法を実行した後、カスタムテストクラスでユニットテストを行うことができません。 Appleの例を使ってうまく動作します。
カスタムクラスは、単純なサブクラス化されたNSObjectで、簡単なiVarsを使用します。クラス "Snookie"と呼ぶことにします。
私はすでにいくつかの疑問のある解決策を試みましたが、まったく同じ問題を抱えている人からの返答を受け取りたいと思います。
レプリケーション:
- MyAppTestingユニットテストバンドルターゲットを追加します。
- MyAppTestingのget infoの下に、MyAppを直接依存関係として追加します。
- "テスト"というグループを作成します。
- "テスト"の下に、ObjectiveCテストケースクラスを追加します。次のように新しいテストケースクラス.Mで
#import <SenTestingKit/SenTestingKit.h> #import <UIKit/UIKit.h> #import "Snookie.h" @interface SnookieTests : SenTestCase { Snookie *snookieObject; } @end
、ALLOC /初期化snookie: 新しいテストケースクラス.Hで
#import "SnookieTests.h" @implementation SnookieTests - (void) setUp { snookieObject = [[Snookie alloc] init]; } - (void) tearDown { [snookieObject release]; } @end
エラー:何を考えて
"_OBJC_CLASS_$_Snookie", referenced from:
Objc-class-ref-to-Snookie in SnookieTests.o
Symbol(s) not found
Collect2: Id returned 1 exit status
私はそれとあなたの回答を投稿している間、私は同じ問題を別の方法でとりました。 「アプリケーションのテスト」セクションのAppleのドキュメントhttp://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/135-Unit_Testing_Applications/unit_testing_applications.htmlを参照してください。私は、テストに私のヘッダーをインポートし、正確に同じ手順を実行し、同じ結果を得ます。 – Richard
この例では、テストしているクラスをテストバンドルにリンクする方法を説明していません。 Snookie.mをテストバンドルに追加する必要があります。それはまさにエラーがあなたに伝えていることです。 – JeremyP
リラックスして休憩した後、KperryとJeremyPは100%正確でした。私のその後のエラーの原因は、コードのリファクタリングにつながった悪いインターフェイスプログラミングのためでした.....ありがとう!!!! – Richard