如何从OCMock开始并检查是否调用了方法

Tom*_*ulc 6 tdd unit-testing objective-c ocmock ios

我正在努力解决这个问题OCMock.我创建了简单的类MyClass.

@interface MyClass : NSObject
- (NSString *)simpleMethod;
@end

@implementation MyClass

- (NSString *)simpleMethod {
    [self method];
    return @"simple";
}

- (void)method {
    NSLog(@"ABC");
}

@end
Run Code Online (Sandbox Code Playgroud)

我想要检查的是method调用方法时simpleMethod是否调用了方法.现在我有以下代码,但它不起作用:

- (void)testMethodInvoked
{
    id mock = [OCMockObject mockForClass:[MyClass class]];
    [[mock stub] simpleMethod];

    SEL selector = NSSelectorFromString(@"method");
    [[mock expect] methodForSelector:selector];
    [mock verify];
}
Run Code Online (Sandbox Code Playgroud)

我该如何测试这个案例?我认为这很容易做到,但我不知道如何解决这个问题.

如何创建调用方法的mock和call simpleMethod方法method

当前日志:

<unknown>:0: error: -[OCMockTestTests testOne] : OCMockObject[MyClass]: expected method was not invoked: methodForSelector:@selector(method)
Run Code Online (Sandbox Code Playgroud)

Seb*_*ian 15

您实际上从未创建要测试的类的对象.此外,您必须expect先,然后调用方法:

- (void)testMethodInvoked
{
    // first create an object that you want to test:
    MyClass *object = [[MyClass alloc] init];
    // create a partial mock for that object
    id mock = [OCMockObject partialMockForObject:object];
    // tell the mock object what you expect
    [[mock expect] method];
    // call the actual method on the mock object
    [mock simpleMethod];
    // and finally verify
    [mock verify];
}
Run Code Online (Sandbox Code Playgroud)

  • 听起来不是单元测试的合适条件,那么@TomaszSzulc.单元测试用于接口 - 外部行为 - 不是实现. (3认同)