ios - 如何编写单元测试来检查按下按钮是否会导致调用正确的 IBAction?

标签 ios unit-testing ibaction ocmock

我需要编写一个单元测试来检查按下按钮是否会调用正确的 IBAction

这是我的测试方法:

- (void)testWhether_loginBtnTapped_IsCalledAfterUserTapLoginButton
{
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    GoingToLoginViewController *myViewController = [storyboard instantiateViewControllerWithIdentifier:@"GoingToLoginVC"];

    id vcMock = [OCMockObject partialMockForObject:myViewController];

    [[vcMock expect] loginBtnTapped:[OCMArg any]];

    [myViewController.loginBtn sendActionsForControlEvents:UIControlEventTouchUpInside];

    [vcMock verify];
}

当我运行测试时,我有日志消息:

error: testWhether_loginBtnTapped_IsCalledAfterUserTapLoginButton (Ticket2Tests) failed: OCPartialMockObject[GoingToLoginViewController]: expected method was not invoked: loginBtnTapped:<OCMAnyConstraint: 0xfd3aeb0>

当我在模拟器上运行我的应用程序时,按钮正常工作并且 - (IBAction)loginBtnTapped:(id)sender; 被调用。

我做错了什么,我应该怎么做才能通过测试?

最佳答案

我怀疑 myViewController.loginBtn 是 nil,因为您还没有加载 View 。尝试调用 [myViewController view] 以首先加载 View 。

关于ios - 如何编写单元测试来检查按下按钮是否会导致调用正确的 IBAction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17061645/

相关文章:

ios - 如何以编程方式在 UIScrollView 中使用 AutoLayout 设置 subview ?

ios - Firebase 推送通知在收到通知时增加角标(Badge)计数

ruby-on-rails - 测试 rake 任务中定义的方法

xcode - 无法将 IBAction 连接到 xib 的 TableView

Swift - 在没有参数的情况下调用 viewDidLoad 中的@IBAction 方法

iphone - 高效使用 Interface Builder

ios - Swift Playground 错误 : Unrecognized Selector sent to instance (related to UITapGestureRecognizer)

objective-c - 首先在 NSString 中添加文本

python - 使用nosetests 特别命名的目录

javascript - 诗乃js AssertError : expected stub to be called once but was called 0 times