2012-07-09 57 views
0

我想設置一個OCMock來驗證。OCMock:檢查參數的安裝語法

我有一個協議,TaskManagerDelegate,包含下面的方法,

- (void) addTasks:(NSArray *) tasksToAdd; 

設置我的模擬對象像在此之後,

id mockTaskManagerDelegate = [OCMockObject mockForProtocol:@protocol(TaskManagerDelegate)]; 

我分配對象到類被測樣這個,

taskManager.Whatever = mockTaskManagerDelegate; 

我在我的taskManager上調用了一個方法,並且t它想要驗證TaskManagerDelegate上調用的addTasks方法,並且傳遞給它的數組只包含一個對象。

到目前爲止,我已經使用OCMArg類來檢測參數是否被傳入,但我正在努力瞭解如何檢查發送的特定類型是發送到模擬,還是發送到模擬通過的對象某些測試(例如只有一個.count)。我來自C#背景,通常會使用Moq,您可以在其中使用lamda函數對發送到模擬對象的參數執行特定的檢查。

是否有人知道如何與OCMock做到這一點,或者如果由於某種概念上的原因,這是不可能做到的?

謝謝,

回答

0

在OCMock網站的特徵的描述具有這樣的:;-)

「如果Objective-C的塊是可用的,可以與塊查詢的參數,如下所示:

[[mock expect] someMethod:[OCMArg checkWithBlock:^(id value) { /* return YES if value is ok */ }]]; 

會爲你工作?你的環境下塊不可用?

0

我有相同的要求,因此創建了一個類別:

@implementation OCMArg (IsOfClass) 

+ (id)isOfClass:(Class)aClass 
{ 
    BOOL (^classCheck)(id) = ^BOOL(id obj) { 
     return [obj isKindOfClass:aClass]; 
    }; 

    return [[OCMBlockConstraint alloc] initWithConstraintBlock:classCheck]; 
} 

@end