0

Kiwi フレームワークを使用して、Magical Record ライブラリを介してコードと Core Data 間の相互作用をテストしています。Magical レコードは、MR_createInContext:(NSManagedObjectContext *)context などの優れたメソッドをいくつか追加する NSManagedObject のカテゴリを定義します。私は、そのメソッドが呼び出されるかどうか、および何回呼び出されるかをテストしようとしています。

it(@"should create new object for me object with new id", ^{
    [[[NSManagedObjectContext MR_contextForCurrentThread] should] receive:@selector(MR_createInContext:)];
    Me *me = [Me meWithID:@"12345" inContext:[NSManagedObjectContext MR_contextForCurrentThread]];
    [me shouldNotBeNil];
    [[me.idNumber should] equal:@"12345"];
});

問題は、キーウィがそのカテゴリを認識していないように見えることです。

#import <CoreData+MagicalRecord.h>

テスト .m ファイル内。

ME_ShouldCreateNewObjectForMeObjectWithNewId (EHMeSpecs) が失敗しました: 'ME, should create new object for me object with new id' [FAILED], スタブできません -MR_createInContext: そのようなメソッドが存在しないため

Kiwi にカテゴリを認識させるにはどうすればよいですか?

4

2 に答える 2

0

テストの名前を見ると、Core Data が機能し、新しい管理対象オブジェクトが作成され、適切な ObjectID があることを確認するという意図が推測されます。キウイがカテゴリなどを傍受する方法を知る必要があるとは思いません。私はあなたのテストを次のように書くだけです:

it(@"should create a new object", ^{

    NSManagedObjectContext *testContext = [NSManagedObjectContext MR_context];
    id myObject = [MyEntity createWithStuff:@{...} inContext:testContext];

    assertThat(myObject, isNot(nil));
    assertThat([myObject someAttrbiute], is(equalTo(@"some value")));
});

カテゴリが機能するかどうかのテストについて心配する必要はありません。このテストでは、とにかく暗黙のうちにそれをテストしているためです。このテストが失敗した場合、カテゴリが機能していないことがすぐにわかります。

テストの私のルールの 1 つは、「言語またはフレームワークをテストしない」です。カテゴリが機能するかどうかをテストしているときは、このルールに違反しており、他の誰かがテストした可能性が最も高いものをテストしています。

于 2013-05-02T21:24:43.883 に答える