使用 OCUnit 测试是否显示 UIAlertView

2024-01-11

我正在开发一个应用程序,它将显示UIAlertView仅当游戏取得进展时,才按下退出按钮。我想知道你如何使用 OCUnit 来拦截UIAlertView并与之互动,甚至检测它是否已呈现。我唯一能想到的就是猴子补丁[UIAlertViewDelegate willPresentAlertView],但这让我想哭。

有谁知道更好的方法来做到这一点?


Update: 看我的博文如何对您的警报和操作表进行单元测试 https://qualitycoding.org/uialertview-unit-testing/

我的另一个答案的问题是-showAlertWithMessage:方法本身永远不会通过单元测试来执行。对于简单的场景,“使用手动测试验证一次”并不算太糟糕,但错误处理通常会涉及难以重现的异常情况。 ……此外,我有一种挥之不去的感觉,我已经停止了,也许还有更彻底的方法。有。

在被测类中,不要实例化UIAlertView直接地。相反,定义一个方法

+ (Class)alertViewClass
{
    return [UIAlertView class];
}

可以使用“子类和覆盖”来替换。 (或者,使用依赖注入并将此类作为初始值设定项参数传递。)

调用它来确定要实例化的类以显示警报:

Class alertViewClass = [[self class] alertViewClass];
id alert = [[alertViewClass alloc] initWithTitle:...etc...

现在定义一个模拟警报视图类。它的工作是记住其初始化参数,并发布通知,将其自身作为对象传递:

- (void)show
{
    [[NSNotificationCenter defaultCenter] postNotificationName:MockAlertViewShowNotification
                                                        object:self
                                                      userInfo:nil];
}

您的测试子类(TestingFoo)重新定义+alertViewClass替换模拟:

+ (Class)alertViewClass
{
    return [MockAlertView class];
}

让您的测试类注册通知。调用的方法现在可以验证传递给警报初始值设定项的参数以及次数-show已发消息。

附加提示:除了模拟警报之外,我还定义了一个警报验证器类:

  • 注册通知
  • 让我设置期望值
  • 收到通知后,根据预期值验证状态

因此,我现在所做的所有警报测试就是创建验证程序、设置期望并执行调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OCUnit 测试是否显示 UIAlertView 的相关文章

  • 在 iPhone 应用程序中获取路线和路线导航

    我正在开发一款应用程序 该应用程序将重点关注在驾驶时为用户提供路线和逐段指示 他们在驾驶过程中留在应用程序中非常重要 因此我真的不想让他们离开应用程序并转到内置的地图应用程序 我最近对如何包含此功能进行了大量研究 众所周知 这并不容易 因为
  • 我们可以在板条箱之间共享测试实用程序吗?

    我有 crate 0 有src lib rs如下 cfg test pub mod test utils pub struct OnlyInTests pub usize pub fn helper gt usize 999 test fn
  • Objective-C 内存管理:发布时崩溃

    我是 Objective C 的新手 似乎无法正确理解内存管理代码 我有以下代码 Media myMedia self myMediaManager getNextMedia self navigationItem title self m
  • 如何在 iPhone sdk 上访问年龄限制家长控制

    有没有办法以编程方式访问 iPhone iPad iPod 上家长控制中设置的年龄限制 如果年龄限制太低 我想禁止使用某些功能 我一直在四处寻找 但也许我没有使用正确的搜索词或其他东西 任何帮助表示赞赏 也许这样行不通 thanks 从 3
  • NSString 对象的最大长度是多少?

    NSString 对象中可以保存的最大字符串大小是多少 这会动态变化吗 我假设 NSString 的硬限制是 NSUIntegerMax 个字符 因为 NSString 的索引和大小相关的方法返回 NSUInteger 由于当前能够运行 i
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV
  • iPhone 的翻译器?

    我对为 iPhone 制作一个解释器很感兴趣 这将是一个实验性的想法 但可能会很棒 我喜欢让我自 己的语言适合移动计算和数学的想法 我查阅了很多资料 发现有关 iPhone 上的口译员的信息很复杂 苹果会允许什么 我见过这个应用程序 这是一
  • 从设备获取联系人列表时出现问题

    这段代码有什么问题 NSMutableArray contactArray NSMutableArray alloc init ABAddressBookRef addressBook ABAddressBookCreate CFArray
  • 自定义 UINavigationController UINavigationBar

    基本上我想要一个定制UINavigationBar 我不希望它是 半透明 或任何东西 就像图片应用程序一样 我基本上想完全删除它 但我仍然希望能够在按下导航控制器时添加后退按钮等 并且我想要视图 例如 UITableViewControll
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 为什么 Apple 建议以编程方式创建模态导航控制器?

    以模态方式呈现导航控制器时 以编程方式创建和配置导航控制器对象通常更简单 虽然您也可以使用 Interface Builder 来执行此操作 但通常不建议这样做 事实上 因为我的导航控制器很简单 我宁愿在IB中自定义视图 虽然我不知道确切的
  • SDK 和 iOS 部署目标。

    我使用最新的 SDK 4 1 构建项目并设置 iOS 部署目标 3 0 如果我使用4 0 sdk的某些方法 我可以在真正的iPhone 3 0上运行我的项目吗 您只能在 OS 3 设备上运行您的项目 如果有条件地编码围绕您想要使用的 OS
  • iPhone Dev:从子控制器和 TabBar 中的另一个控制器重新加载表视图的数据

    我正在实现一个笔记管理器应用程序 它在 tabBar 中有一个 tableView 其中显示其笔记的主要信息 访问一个注释时 您可以编辑其属性 在 tabBar 的一个按钮中 您可以选择注释在 tableView 中的显示方式 我遇到的问题
  • 使用标识符启动 iPhone 应用程序

    我正在尝试在我的应用程序中启动应用程序 例如 如果我按下 testApp1 中的按钮 它应该打开 testApp2 有没有办法用应用程序标识符来做到这一点 我听说过一种名为的未记录方法launchApplicationWithIdentif
  • 无需编译的 ES6 单元测试

    我无法找到任何 Mocha 或任何其他通过 Gulp 直接在 ES6 代码上运行的单元测试框架的示例 没有 Babel Webpack 等 我找到了一个在浏览器中使用 ES6 代码运行 Mocha 的示例 经过一些修改 但它不是自动化的 有
  • 使用 Dirac 在 iPhone 中进行实时音高变化 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的实时音调变换 https stackoverflow com questions 1100495 real time pitch shifting on the iphone 我已经
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 使用ios sdk在youtube上上传视频的方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何从 iOS 应用程序中将视频上传到 YouTube https stackoverflow com questions 3528568 how do i upload a video to you
  • 找不到 Cocoa/Cocoa.h 文件

    我在用XMPPFramework在我的应用程序中 我已将 Cocoa Cocoa h 导入到我的 m 文件中 但是当我构建项目时Xcode显示错误 错误 未找到 Cocoa Cocoa h 文件 我该如何解决这个错误 如果您正在为 iOS
  • 如何检测 UITableView 中某个单元格的双击?

    如何检测某个单元格上的双击UITableView i e 如果用户进行了一次触摸 我想执行一个操作 如果用户进行了两次触摸 我想执行另一个操作 我还需要知道进行触摸的索引路径 我怎样才能实现这个目标 Thanks 如果您不想创建子类UITa

随机推荐

  • 在 Windows 上的 python 2.7.8 上安装 pip

    我正在尝试安装 python 2 7 8 的模块 pip 即 arcGIS 为您安装的模块 我正在使用安装 pip 的引导方法 当我运行时遇到错误get pip py使用命令提示符 我收到以下错误 Warning from warnings
  • 如何复制特征矩阵

    我有两个Eigen MatrixXd他们总是有一排 输入矩阵是A我想将这个矩阵复制到另一个矩阵中B 但矩阵之间的列数可以不同 下面是一个例子 A 0 5 我需要创建一个B1行4列的矩阵 因此它是 B 0 5 0 5 0 5 0 5 But
  • Angular 2:视图未在数组推送时更新

    我有两个子组件 他们正在共享我使用 http get subscribe 方法加载的 json 文件中的数据 由于某种原因 当我将数据推入数组时 它不会在视图中更新 但它在控制台中显示了更新后的数组 应用程序组件从服务加载数据 this d
  • 海龟图形颜色检测

    有什么方法可以检测python中乌龟站立的颜色吗 例如 如果乌龟在黑色空间上 他就会向前移动 快速扫了一眼turtle文档 不 没有办法检测颜色 您可能应该记录迄今为止绘制的空间 每当绘制新空间时将其添加到集合中 那么 当你想知道一个旧空间
  • InvalidArgumentError:loc 处需要可广播形状(未知)

    背景 我对 Python 和机器学习完全陌生 我只是尝试根据在互联网上找到的代码建立一个 UNet 并希望将其适应我正在处理的情况 当试图 fit将UNet训练数据 我收到以下错误 InvalidArgumentError required
  • Tensorflow.js:将图像大小调整为特定字节大小

    为了进行预测 我需要形状为 null 7 7 256 的图像 const image tf reshape tf fromPixels loadedImage resizeBilinear null 7 7 256 但我不知道如何将图像调整
  • flutter 应用程序中的 Google 地图

    嘿 我想问是否有办法在 flutter 应用程序中使用 google 地图 api 我想避免使用静态地图 如果有办法请告诉我 内联地图支持包含在issue 73 https github com flutter flutter issues
  • Rails、Devise - 管理员尝试编辑另一个用户配置文件,而是加载自己的配置文件

    作为使用 Rails 进行开发的新手 我正在尝试了解以下内容 我正在使用 Devise Cancan olify 应用程序来尝试创建身份验证和用户管理 我对一般用户行为进行了排序 并且我正在尝试实现管理员用户能够编辑另一个用户配置文件 目前
  • 在 python 中创建 Azure TimerTrigger 持久函数

    正如我在标题中所说 是否有可能拥有一个使用 TimerTrigger 而不仅仅是 httpTrigger 触发的天蓝色持久应用程序 我看到这里https learn microsoft com en us azure azure funct
  • 有没有办法枚举 vb6 类模块中的所有属性?

    在 Net 中 您可以使用反射来访问类的所有属性的枚举 这也可以用 VB6 类模块来完成吗 找到了 您需要设置对 TypeLib 库 tlbinf32 dll 的引用 然后您可以使用如下代码 这是类模块 编辑 不幸的是 虽然下面的代码在 V
  • 在dom-testing-library或react-testing-library中测试输入值的最佳方法

    测试产品价值的最佳方法是什么
  • 防止替换逗号分隔字符串中已替换的字符串

    我有一个字符串是 string mainstr NONSALE REVENUE SALE REVENUE 我正在尝试更换NONSALE REVENUE with SUM NONSALE REVENUE and SALE REVENUE wi
  • 自定义 Firebase 数据服务类:Swift 3

    我正在寻找一种干净的方法来在 Swift 中从 Firebase 检索 有时保存 数据 令我烦恼的是 我所有的数据库调用都写在视图控制器代码的中间 所以我正在寻找某种自定义数据服务类 我发现这个教程很接近我想要的 http www mobi
  • 在 Automapper 中展平自引用对象

    我有一个自引用模型 我想将其转换为平面列表 模型看起来像这样 public class Node public List
  • 返回数组第一个重复元素的最佳方法

    这是一道面试题 从整数数组中返回第一个重复元素的最佳方法是什么 Example 给定一个数组 12 46 244 0 12 83 48 98 233 83 26 91 119 148 98 本例中的返回值为12 如何才能做到这一点 我认为如
  • 在 Mac OS 10.7 上通过 pygame 使用 python 多处理模块进行 IO

    我使用 pygame 来运行认知科学实验 并且通常有大量的 I O 需求 因此我喜欢将这些任务分叉到单独的进程 当使用多核机器时 以提高代码的性能 但是 我遇到了这样的情况 某些代码可以在我同事的 Linux 机器 Ubuntu LTS 上
  • 集合流与新集合的交集

    有没有更好 更简单的方法来解决这个问题 Test public void testReduce Set
  • poll 和 select 有什么区别?

    我指的是 POSIX 标准select http en wikipedia org wiki Select Unix and poll http linux die net man 2 poll系统 C API 调用 The select
  • 在 Eclipse 中找不到 Nexus 7 的 storage/emulated/0/ 文件夹

    Nexus 7 Ubuntu 12 04 Eclipse Juno Nexus 7 已设置开发者模式 在 Eclipse 中 我可以在 Android 的 文件资源管理器 中看到列表 我可以看到存储 模拟 旧版 但我看不到 storage
  • 使用 OCUnit 测试是否显示 UIAlertView

    我正在开发一个应用程序 它将显示UIAlertView仅当游戏取得进展时 才按下退出按钮 我想知道你如何使用 OCUnit 来拦截UIAlertView并与之互动 甚至检测它是否已呈现 我唯一能想到的就是猴子补丁 UIAlertViewDe