ios – 如何在ARC中的OCMock中模拟**参数

我的方法一个参数是**错误,我的项目是在ARC模式.当为此方法编写存根以调用mock方法时,我将参数设置为可能的值.它会导致编译错误或无法匹配参数来调用mock方法.

> Ocmock_ANY
> [OCMArg anyPointer]
>创建一个NSError对象错误,并表示[OCMArg setTo:error].

没有什么工作.

如何模拟这种方法?请指教.

编辑

-(id)init{

    self = [super init];

    if (self) {
        id wcm = [OcmockObject partialMockForObject:self];
        [[[wcm stub] andCall:@selector(mockGetWakeupCallsForRoomNumber:error:)    onObject:self] getWakeupCallsForRoomNumber:Ocmock_ANY error:((NSError __autoreleasing **)    [OCMArg anyPointer])];
        //[[[wcm stub] andCall:@selector(testMockMethod) onObject:self] testMethod];

    }
    return self;

}

-(void)testMethod
{
    NSLog(@"Original");
}

-(void)testMockMethod
{
    NSLog(@"Mock");
}
-(NSArray*)mockGetWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error
{
    @throw @"Mock method called";
}

-(NSArray*)getWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error
{
}

模拟testMockMethod工作.

解决方法

您可以使用setTo:或anyPointer来转换它:
[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg anyPointer])];

要么:

NSError *error;
[[[mockFoo expect] andReturn:nil] someMethodWithError:((NSError __autoreleasing **)[OCMArg setTo:error])];

这是一个通过您发布的方法传递的测试用例:

@interface Foo : NSObject{}

-(NSArray*)mockGetWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error;
-(NSArray*)getWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error;

@end

@implementation Foo

-(NSArray*)mockGetWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error
{
    return @[@"bar"];
}

-(NSArray*)getWakeupCallsForRoomNumber:(Nsstring*)roomNumber error:(NSError**)error
{
    return nil;
}

@end

@interface SomeTest : SenTestCase {}
@end

@implementation SomeTest

-(void)testMethod
{
    Foo *foo = [Foo new];
    id wcm = [OcmockObject partialMockForObject:foo];
    [[[wcm stub] andCall:@selector(mockGetWakeupCallsForRoomNumber:error:) onObject:foo] getWakeupCallsForRoomNumber:Ocmock_ANY error:((id __autoreleasing *)[OCMArg anyPointer])];
    NSError *error;
    NSArray *calls = [wcm getWakeupCallsForRoomNumber:@"foo" error:&error];
    STAssertEquals(calls[0],@"bar",@"should match");
}

@end

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...