問題タブ [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.
ios - OCMockは、パラメーターが予期されたものではない場合にNSInternalInconsistencyExceptionをスローします
デリゲートオブジェクトのモックオブジェクトを設定して、URLがnilの場合に、パラメーターとしてnilを使用してデリゲートメソッドが呼び出されることを確認しています。
期待どおりに動作する場合はFileDownloadOperation
、テストに合格します。これで問題ありません。
FileDownloadOperation
がデリゲートメソッドを呼び出さない場合、テストは期待どおりに失敗します。
しかしFileDownloadOperation
、デリゲートメソッドを他の何かで呼び出すと、nil
失敗するのではなく、テストがクラッシュし、次のようにOCMock
スローされるため、他のテストは実行されません。
'NSInternalInconsistencyException'理由:'OCMockObject [FileDownloadOperationTest]:呼び出された予期しないメソッド:data:<> forURL:nil
期待される動作ですか?または私は何か間違ったことをしていますか?ありがとう !
xcode - プリミティブを OCMock のスタブに渡す
OCMock を使用して iPhone のプロジェクトをテストする方法を学習しています。このシナリオがあります。getHeightAtX:andY:
メソッドを使用する HeightMap クラスと、 HeightMap
. HeightMap
いくつかのモックを使用して Render を単体テストしようとしています。これは機能します:
もちろん、x=0
と でのみ機能しy=0
ます。「フラットな」高さマップを使用してテストしたい。これは、次のようなことをする必要があることを意味します。
ただし、これにより 2 つのコンパイル警告が発生します。
警告: の引数 1 を渡すと
'getHeightAtX:andY:'
、キャストなしでポインタから整数になります
および実行時エラー:
予期しないメソッドが呼び出されました:
'getHeightAtX:0 andY:0 stubbed: getHeightAtX:15545040 andY:15545024'
私は何が欠けていますか?anyValue
このモックにa を渡す方法が見つかりませんでした。
objective-c - 依存性注入にコアデータを使用する方法
主に依存性注入のために、Core Dataを使用してオブジェクトのグラフを管理しようとしています(NSManagedObjectsのサブセットは永続化する必要がありますが、それは私の質問の焦点ではありません)。単体テストを実行するときは、NSManagedObjectsの作成を引き継ぎ、モックに置き換えたいと思います。
今のところ、これを行うための候補となる手段があります。これは、ランタイムのmethod_exchangeImplementationsを使用し[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
て、自分の実装と交換することです(つまり、モックを返す)。これは、私が行った小さなテストで機能します。
これに関して2つの質問があります。
- insertNewObjectForEntityForName:inManagedObjectContextをスウィズリングするよりも、Core Dataのオブジェクト作成を置き換えるためのより良い方法はありますか?私はランタイムやコアデータに深く踏み込んでおらず、明らかな何かが欠けている可能性があります。
- 私の置換オブジェクト作成メソッドの概念は、モックされたNSManagedObjectsを返すことです。私はOCMockを使用していますが、動的な
@property
sのため、NSManagedObjectサブクラスを直接モックすることはありません。今のところ、NSManagedObjectのクライアントは具象オブジェクトではなくプロトコルと通信しているため、具象オブジェクトではなくモックされたプロトコルを返します。もっと良い方法はありますか?
これが私が得ているものを説明するためのいくつかの疑似的なコードです。これが私がテストしているかもしれないクラスです:
おそらく永続性などのために、ThingyおよびThingo NSManagedObjectサブクラスを作成することにしましたが、initを次のようなものに置き換えることもできます。
次に、ユニットテストで次のようなことができます。
...[]FakeEntityDescription insertNewObjectForEntityForName:inManagedObjectContext]
実際のNSManagedObjects(またはそれらが実装するプロトコル)の代わりにモックを返します。これらのモックの唯一の目的は、ClassUnderTestの単体テスト中に行われた呼び出しを検証することです。すべての戻り値はスタブされます(他のNSManagedObjectsを参照するゲッターを含む)。
したがって、私のテストClassUnderTest
インスタンスは単体テスト内に作成されます。
ClassUnderTest *testObject = [ClassUnderTest initWithManagedObjectContext:mockContext];
(私のスウィズルのため、コンテキストは実際にはテストで使用されませんinsertNewObjectForEntityForName:inManagedObjectContext
)
このすべてのポイント?とにかく多くのクラスでコアデータを使用するので、コンストラクターの変更を管理する負担を軽減するために使用することもできます(コンストラクターを変更するたびに、単体テストの束を含むすべてのクライアントを編集する必要があります)。Core Dataを使用していなかった場合は、異議申し立てのようなものを検討するかもしれません。
ios - OCMock 検証の遅延 / 単体テストでのタイムアウトの処理
OCMock を使用して実際の Web サービス呼び出しをテストしています。
今、私は次のようなことをしています:
正常に動作しますが、そのようなテストにはすべて 2 秒かかることを意味します。
たとえば 2 秒のタイムアウトを設定し、すぐにsomeMethod
of を呼び出してテスト ケースを完了する方法はありますか?mydelegatemock
verify
objective-c - OCMock を使用してスタブ値でオブジェクトを初期化する方法
init メソッドで使用されるメソッドをスタブするにはどうすればよいですか?
私のクラスの関連メソッド:
私のテスト:
私の結果:
キャッチされていない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: 'OCMockObject[AdViewController]: 予期しないメソッドが呼び出されました: smallAdRight '
では、OCMockObject の AdViewController にアクセスするにはどうすればよいでしょうか。
objective-c - テストメソッドから呼び出されるメソッドを持つクラスのOCMock
のインスタンスをインスタンス化するメソッドをテストしようとしていますMFMailComposeViewController
。テストされているメソッドは、MFMailComposeViewController
を含むいくつかのメソッドを呼び出しますsetSubject:
。
setSubject に特定の NSString (この場合は @"Test Message") が送信されることをテストしたいと思います。
モック スタブで予想される文字列に何を指定しても、失敗はありません。
単体テスト クラス:
TestClass で:
テストは失敗するはずでした。
これを iOS シミュレーターでテストしていますが、デバイスでも同じ結果が得られます。
私は何を間違っていますか?これを達成する方法はありますか?
objective-c - 構造体のアドレスをテストする OCMock
構造体のアドレスを渡している、テストしたいコードがいくつかあります。
私はsomeObject
レコードを返すために嘲笑しました:
残念ながら、NSValue ラッパーから構造体を引き出すと常に別のアドレスが返されるため、OCMock は失敗します (私は信じています)。
パラメーターの 1 つが構造体のアドレスである場合、正しく動作することを期待する方法はありますか?
iphone - OCMockがiOS5で期待し、スタブが失敗するのはなぜですか?
いくつかのスタブと期待値が設定された単純なモックオブジェクトがいくつかあります。iOS 4.3シミュレーターでテストを実行すると、すべて合格です。iOS 5で実行すると、「予期しないメソッドが呼び出されました」というエラーが発生します。例として、- (void) foo: (NSString *) bar
期待値を設定して実行するメソッドがあります。結果は
なぜこれが起こっているのか、またはそれを修正する方法を知っている人はいますか?テスト自体は完全に問題なく、iOS4で何ヶ月も機能しています。
exception - partialMockForObject と UIView を使用した EXC_BAD_ACCESS
OCMock と UIView に問題があります。
私はこのコードのようなものを持っています:
そして、[[[view1Mock expect] andForwardToRealObject] removeFromSuperview] で EXC_BAD_ACCESS が頻繁に発生します。しかし、毎回ではありません。OCMock の行まで追跡できず、毎回発生するわけではないため、非常に面倒です。
何か案が?
編集:
ARC を有効にした新しい Apple LLVM 3.0 コンパイラを使用していますが、それが理由かもしれません。しかし、私はそれを修正したいと思います。ARC で OCMock をコンパイルしようとした人はいますか?
よろしくお願いします、ダニエル