如何测试特定方法是否被调用

How to test if a specific method is called

你好,

我正在为我的应用程序编写单元测试,我想知道是否可以测试是否调用了特定方法。

例如,假设我想测试当下面的dismiss方法被调用时,reallyDismiss方法也被调用:

- (void)dismiss
{
   [self reallyDismiss];
}

是否有类似的东西:

- (void)testReallyDismissIsCalledWhenDismissIsCalled
{
    [self.viewController dismiss];
    XCTAssertMethodHasBeenCalled(@"reallyDismiss");
}

?

您可以将代码重构为

-(BOOL)dismiss {
   if someCondition {
        [self reallyDismiss];
        return YES;
   } else {
        return NO;
   }
}

- (void)testReallyDismissIsCalledWhenDismissIsCalled
{
    XCTAssertTrue([self.viewController dismiss], @"reallyDismiss");
}

不直接,不。您通常会使用模拟库来注入您自己的该方法版本,以便您可以添加它被调用的期望或 subclass 目标 class 以便 subclass 可以拦截(并在需要时转发)您正在检查的方法调用。