問題タブ [ocmock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - NSWindowControllerをあざける
私はMacアプリケーション、実際にはNSStatusItemを持っており、その環境設定ウィンドウをテストしようとしています。このコードは、ウィンドウが初期化され、applicationDidFinishLaunching以外の関数で表示されることを除けば、コードとほとんど同じように機能するため、モデルとして使用しました。 http://bit.ly/wH6QOk
エラーが発生します:予期されたメソッドが呼び出されません:window
なぜこれが起こるのか理解できません。これが私のテストコードです:
objective-c - 実行時に OCMock が失敗する
テスト ケースで初めて OCMock を使用しようとしています。これは、Xcode 4.3 で構築され、Lion をターゲットとする Mac プロジェクトです。メイン アプリとテスト バンドルの両方で ARC がオンになっているため、テストを実行するたびに次のログ メッセージが表示されます。
GC: forcing GC OFF because OBJC_DISABLE_GC is set
私は ARC を使用しているので、GC は気にしません。OCMock の最新の安定版リリース (2.0.1) にリンクされた単体テストをビルドすると、ビルドに問題はありません。実行時に、上記のログ ステートメントの後、次のようになります。
The test bundle at /Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest could not be loaded because its Objective-C runtime information does not match the runtime information required by the test rig. This is likely because the test rig is being run with Objective-C garbage collection disabled, but the test bundle requires Objective-C garbage collection. To enable Objective-C garbage collection for the test rig, run it in an environment without the OBJC_DISABLE_GC environment variable.
2012-03-06 10:29:32.812 otest[8486:203] *** NSTask: Task create for path '/Users/___/Library/Developer/Xcode/DerivedData/___-ayizwpehemunvodsdvczckkvarsh/Build/Products/Debug/___Tests.octest/Contents/MacOS/___Tests' failed: 22, "Invalid argument". Terminating temporary process.
このメッセージは、ガベージ コレクションが最も一般的な原因であることを示していますが、前述のとおり、GC を使用する方法はありません。では、実行時に私を台無しにする可能性のある他の設定は何ですか? 私は自分が異常なことをしているとは思いませんでした。テスト プロジェクトの設定を確認しましたが、奇妙なことは何もありませんでした。
アップデート
これを新しい空のプロジェクトで再現できました。
- 新しいプロジェクトを作成し、ARC を有効にして単体テストを作成する
Test Host
単体テスト バンドルのビルド設定から設定をクリアする- OCMock フレームワークへのリンク
- テストを実行し、上で報告したのと同じエラーを目撃します
また、ARC をオフにしてガベージ コレクションをRequiredにclang
すると、mach-o リンカ エラーが報告されるため、ビルドが成功しません。OCMock フレームワークへのリンクを削除すると、正常にビルドされます。これは、ガベージ コレクション以外に問題があるという私の最初の考えを裏付けるものです。
objective-c - OCMock で KVO をモックする
Key-Value-Observation が私のクラスで適切に機能していることをテストしたいと思います。別のプロパティに依存する 1 つのプロパティがあります。それらは次のように設定されています。
単体テストを実行して、firstProperty
変更時にバインドされたオブジェクトsecondProperty
が通知を受け取ることを確認したいと考えています。最初は が使えるかと思ったのです+[OCMockObject observerMock]
が、 でしか使えないようNSNotificationCenter
です。これをテストする最良の方法は何ですか?
objective-c - iOS 5 ランタイムでの状態ベースのテスト用にビュー コントローラをスタブ アウト/インジェクトする方法は?
基本 AppDelegate クラス内のビュー コントローラーで状態ベースのテストを行うための「ベスト プラクティス」/「テスト摩擦の少ない」方法を探しています。現在、以下は、クラスのメソッド内で何かが発生したときに、自分の UIViewController で (ocmock を使用して) スタブする簡単な方法を提供します。
私が持っている最初の質問 - これは、テスト用に独自のモック ビュー コントローラーをスタブ化/注入する有効な方法ですか? (うまく機能しているようですが、これがプロが今日の状態ベースのテストを行っている方法であるかどうかはわかりません)
私が持っている次の質問 - ビュー コントローラーの 1 つのコピーをこのようにメモリに保持することは有効ですか (アプリの存続期間中に一度だけゼロから作成するだけです)。
**注 - これを依存性注入しますが、私の init はすでにナビゲーション コントローラーとタブ バー コントローラーを注入するだけで十分に大きいため、悲しいことに、この大きなクラスのオプションではありません
objective-c - 部分的なモックに、ocmockを使用してargsで呼び出される基本メソッドがあることを確認するにはどうすればよいですか?
私は、基本クラスを使用して一般的に使用される機能を再利用する非常に単純なWebサービスを使用しています。テスト対象のメインメソッドは、URLを作成するだけで、この引数を使用してスーパー/ベースメソッドを使用します。
これが基本メソッドの定義です
私のテストでは、テスト対象のオブジェクトを呼び出したいので、部分的なモックを作成しましたが、スーパーメソッドが特定の方法で呼び出されていることを確認する機能が必要です。
しかし、このテストを実行すると、次のエラーで失敗します。
予期されたメソッドが呼び出されませんでした:makeGetRequestWithURL:https:// ...
NSLogをbaseメソッドに入れると、ocunitテストを実行したときに表示されるため、このメソッドはモックではないことがわかります(明らかに実行されており、必要に応じてモックではありません)。
テストを変更/実装コードをリファクタリングして、探しているアサーションを取得するにはどうすればよいですか?
iphone - ocmockを使用してクラスベースのメソッドで戻り値をスタブ化する方法
ボタンのクリックが発生したときに位置情報サービスが開始されることを確認するためのテストを作成しています。これには、電話に位置情報サービスが利用可能であることを確認するための非常に単純なifステートメントが必要です。
現在の作業テストは次のようになります
現在テストされている実装は次のようになります
このメソッドがiOS4.0で非推奨になったことを除いて、すべて問題ありません。そのため、代わりにクラスメソッド[CLLocationManagerlocationServicesEnabled]を使用する必要があります。
問題は、ocmockがこの機能をサポートしているかどうかがわからないようで、サポートしていない場合は、今のところこの問題をどのように回避する必要があるかです。
ios - NSURLConnection デリゲートを単体テストする方法は?
NSURLConnection デリゲートを単体テストするにはどうすればよいですか? Web からさまざまな ViewController にデータを提供するために、さまざまなプロトコルに準拠する ConnectionDelegate クラスを作成しました。先に進む前に、単体テストの作成を開始したいと思います。しかし、インターネットに接続せずにそれらをユニットとしてテストする方法がわかりません。非同期コールバックを処理するために何をすべきかについても知りたいです。
objective-c - OCMock クラスを ARC に変換する際の前方宣言エラー
Xcode バージョン 4.3.2 (4E2002) にアップグレードしました。モック クラスを手動メモリ管理から ARC に変換しています。
コードは次のようになります。
@interface は次のようになります。
コンパイラは次のように不平を言います。
記述方法で「mockedProtocol」が強調表示されます。
私は以前にこの問題に遭遇しました。ARC モードでは、通常、コンパイラが前方参照に対してより厳密であるため、適切なヘッダー ファイルをインクルードする必要があるだけです。
ただし、私が見つけることができる唯一の「Protocol.h」は
これをインポートしても何も起こりません。また、インポートを OCProtocolMockObject.h に追加しても何も起こりません。私が認識していない他の Protocol.h はありますか?
objective-c - OCMock-NSEntityDescriptionをモックしようとしています
管理対象クラスをテストするために、最初にNSEntityDescriptionとNSManagedObjectContextをモックして、単体テストでインスタンスを作成しようとしました。
しかし、それ以上進む前に、テストの実行時に次のエラーが発生します。
アーキテクチャi386の未定義のシンボル: "_ OBJC_CLASS _ $ _ NSEntityDescription"、参照元:CallsCoordinatorTests.oのobjc-class-ref "_OBJC_CLASS _ $ _ NSManagedObjectContext"、参照元:CallsCoordinatorTests.oのobjc-class-ref:シンボルが見つかりませんアーキテクチャi386clangの場合:エラー:リンカーコマンドが終了コード1で失敗しました(呼び出しを確認するには-vを使用してください)
何かアドバイスはありますか?ありがとう
objective-c - モックされた Web サービスを使用した単体テストがクラッシュし続ける
私のプロジェクトでは、Objective C と単体テストにはまったく慣れていませんが、少し TDD を実行したいと考えていました。JSON 応答を返す Web サービスに接続するプロジェクトを作成しました。これで、Web サービスをモックする単体テストを作成しましたが、クラッシュし続け (失敗することさえありません)、現時点では完全に途方に暮れています....
次のセットアップがあります。
SignUpService
(新しいアカウントを作成する) を使用するServiceHelper
(実際の http Web サービス要求を作成する)。このようにServiceHelper.h
:
とSignUpService.h
次は単体テスト (SignUpServiceTests.h と実装) です。
そして実装:
このプロジェクトには、OCMock バージョン 1.77 と OCHamcrest ライブラリが含まれています。
何らかの理由で、テストは「プロセスは終了コード 0 で終了しました」でクラッシュし続けます。デバッグ中は、何が問題なのかわかりません。メモリ管理と関係があると思いますか、それとも OCMock と ARC と関係がありますか? (こことここで提案されているように)
初心者の Objective C 開発者への考えや提案はありますか?