ios - 如何在 ObjC 中测试 IBAction 和选择器
问题描述
我对如何创建单元测试来验证调用 IBAction 方法以及测试选择器感到困惑。
例如我有这个代码。
- (IBAction)tapButton:(UITapGestureRecognizer *)sender {
//do something
}
此代码用于选择器
[button addTarget:self action:@selector(tapButton:) forControlEvents:UIControlEventTouchUpInside];
- (void)tapButton:(id)sender {
//do something
}
我有这个单元测试。
- (void)test_tapAction {
ClassView *view = [ClassView alloc] init];
id mock = [OCMockObject partialMockForObject:view];
[[mock expect] tapButton:[OCMArg any]];
[mock tapButton:[OCMArg any]];
OCMVerify([mock tapButton:[OCMArg any]]);
[mock stopMocking];
}
但我不确定这是正确的方法。
解决方案
我得到了解决方案。关于测试的代码还不错,但在这一行有一个错误。
[[mock expect] tapButton:[OCMArg any]];
此行没有调用我要测试的方法
- (IBAction)tapButton:(UITapGestureRecognizer *)sender
总之,关于单元测试的代码如下所示:
- (void)test_tapCreditsAction {
ClassView *view = [ClassView alloc] init];
id mock = [OCMockObject partialMockForObject:view];
[mock tapButton:[OCMArg any]];
OCMVerify([mock tapButton:[OCMArg any]]);
[mock stopMocking];
}
这是测试 IBAction 或选择器的正确方法。
推荐阅读
- php - 从 xml 文件更改数据后重新加载 php 页面上的内容
- smtp - 为什么 Postfix 比 Sendmail 更安全?
- python - 如何分配一个带有 id 的取消按钮以从 Django 中的数据库中删除给定的 id
- python - 将文件复制到另一个文件夹,避免在 python 中重复
- spring - 在编译/构建时从 Spring 代码生成 OpenAPI V3 规范
- apache-spark - 创建输出 UDT 的 PySpark UDF
- python - 由于 ruby 依赖关系,pip3 无法在 macOS 上安装 jq
- android - 隐藏状态栏时变黑
- r - ggplot中带有2个不相关变量的双轴条形图?
- java - 通过扫描仪和元素使用 java 进行网页抓取