对类加载有副作用的 iOS 模拟类

标签 ios unit-testing flurry ocmock xctest

我们正在尝试创建一个单元测试(虽然使用 OCMock,但对其他框架开放)模拟一个在类加载时有副作用的类。

我们有一个跟踪类,它包装了对其他跟踪库(如 Flurry)的调用。

许多其他跟踪库(特别是 Flurry)在类初始化时执行代码。

单元测试失败,因为代码无法在单元测试环境中执行。理想情况下,我们希望用模拟/ stub 替换 Flurry 类。

- (void) testConstruction {
    [Flurry class];
}

调用此代码时,它会尝试使用 SCNetworkReachability 并收到 exceptions...

我们如何 stub /模拟调用具有如下静态实现的 Flurry?

[Flurry setAppVersion:@"1.0"];
[Flurry setCrashReportingEnabled:NO];

最佳答案

我将从用于测试的构建配置中删除 Flurry(将其从框架搜索路径/库搜索路径中删除)。我将通过获取 Flurry 头文件并使用空方法创建我自己的实现来创建我自己的虚拟 Flurry。最后,如果我关心 Flurry 被调用,我会使用 OCMock 来模拟我的假类。

关于对类加载有副作用的 iOS 模拟类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21587111/

相关文章:

java - 使用套件进行 JUnit 契约(Contract)测试

unit-testing - Azure DevOps 服务器 : Why does a Visual Studio Test step take so long to run unit tests?

ios - 将 swift 文件移动到现代框架但失去了 Flurry Analytics 功能

iphone - 不再需要 Flurry Analytics 和 Flurry AppCircle?

ios - [Firebase/Core][I-COR000003] 尚未配置默认 Firebase 应用

ios - XCode 设置以查看不适用于以前操作系统版本的代码

ios - 排队 CAAnimations 时出现故障

ios - 在 iOS 应用程序中将图像上传到 Facebook

java - Spring REST API 服务单元测试(更新(PUT 方法))

objective-c - 桥接头不适用于两个框架 (Flurry)