2

Objective Resource を使用してローカル オブジェクトを作成し、リモート レスポンスを反映するアプリケーションがあります。

特定のモデル クラスには、その特定のモデル オブジェクトの特定のプロパティが何であるかに関係なく、さまざまな追加機能、最も重要なこととして、シリアル化、ディスクへの書き込み、およびディスクからの読み込みの機能をすべて与えるために、抽象的なクラスのサブクラスがあります。 .

superclass.m

-(BOOL)saveToDisk{  
    ...serializes and encodes all properties to disk  
    ...return success
}


subclass.h : superclass

@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSArray* friends;
 ...etc

それから私は電話します

     instanceOfSubclass.name = "joe"  
     NSLog(@"save status = %d",[instanceOfSubclass saveToDisk]);

私はBDDとテスト駆動開発全般に不慣れです。このフレームワークを多くのプロジェクトで使用しているため、この機能を抽象的にテストするために、kiwi を使用してモック オブジェクトを作成するにはどうすればよいですか。

具体的には、さまざまなタイプのプロパティを持つサブクラスを保存、読み込み、削除、上書きできることを確認するテストを作成したいと考えています。

私の理解では、これがスタブとモックの出番ですが、プロパティをモックする方法を理解できないようです。これらのプロパティを持つ実際のクラスを作成する必要がありますか?

4

2 に答える 2

1

プロパティは舞台裏のメソッドであるため、次のようになります。

+mockで述べたようにメソッドの組み合わせでこれを行うことができたので@aopsfan-stub:andReturn:プロパティを実装したメソッドの名前を推測しました。この例は、( Twilio iOS SDKから) TCConnectionを偽装して機能しました。

// Instantiates a mocked object:
id fake_connection = [TCConnection mock];
// Creates a faked property accessor:
[fake_connection stub:@selector(parameters)
            andReturn:@{@"From": @"fake-caller"}];

// I could now call my TCDeviceDelegate 's
// -device:didReceiveIncomingConnection:
[myActualObject device:myActualObject.device
            didReceiveIncomingConnection:fake_connection];
// Check some results on the object:
[[myActualObject.connection should] equal:fake_connection];

このパターン固有の例は、おそらく他の状況に一般化できます。シミュレートされたフィクスチャで呼び出すことができないメソッドを無音にするために-stub( なしで) パラメータを呼び出すと便利です。andReturn:

于 2012-11-22T15:01:21.307 に答える
0

この場所にいくつかのドキュメントがあります。基本的に、Kiwi は目的の C カテゴリを提供しておりNSObject#import "Kiwi.h". これにより、 から継承するすべてのオブジェクトが、などNSObjectに応答できるようになります。これは、クラスを介して構成できます。+mockmockWithName:KWMock

これがお役に立てば幸いです。少し遅れて申し訳ありません:)

于 2011-12-16T22:27:50.540 に答える