gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 10:15:43 25 4
gpt4 key购买 nike

我的方法的参数之一是**错误,我的项目处于 ARC 模式。当为此方法编写 stub 以调用模拟方法时,我将参数设置为低于可能的值。要么导致编译错误,要么无法匹配调用 mock 方法的参数。

  1. OCMOCK_ANY
  2. [OCMArg 任意指针]
  3. 创建了一个 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

关于ios - 如何在 ARC 中模拟 OCMock 中的 ** 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18285488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com