ios - 单元测试 Swift 2.0、@testable 导入和方案目标问题

标签 ios swift unit-testing swift2 realm

我最近将我的应用程序和单元测试转换为 Swift 2.0。我在我的 Tests.swift 文件中使用 @testable import AppName

由于无法在多个目标中执行子类的问题 (see here for the issue),我的类 EntityName 只能是 Target Membership AppName,而不能AppNameTests

问题是,一旦我切换到 AppNameTests 模式来运行单元测试,模块 AppName 中的代码就找不到类 EntityName 我得到了

Use of undeclared type 'EntityName'

当从 AppNameTests 方案运行测试时,如果实体类不是该方案的成员,我如何让 AppName 进行编译?

最佳答案

Due to an issue with not being able to execute subclasses in multiple targets

当将相同的 Swift 代码编译为不同目标的一部分时,编译器实际上会生成不同的类。所以这符合设计,但几乎可以肯定这不是您在运行应用的单元测试时想要的。

我建议您通过两种方式设置模型以进行测试:

1。公共(public)模型(推荐)

在您的应用目标中:

import RealmSwift
public class MyModel: Object {}

此代码应作为您的应用程序目标的一部分进行编译,并且您的单元测试可以按以下方式设置:

import MyApp
// should be able to access `MyModel`

够简单吗?

2。 @Testable(仅限 Swift 2)

这种方法依赖于 Swift 2 中引入的 @testable 关键字。

在您的应用目标中:

import RealmSwift
internal class MyModel: Object {} // ACL cannot be `private`

同样,此代码应作为您的应用程序目标的一部分进行编译,并且您的单元测试可以按以下方式设置:

@testable import MyApp
// should be able to access `MyModel`

确保 MyApp 的build设置将 Enable Testability 设置为 YES

如果您正在构建一个框架,而该框架的用户不应访问某些内部模型,则此方法可能优于公共(public)模型。

Realm 在其文档中有专门的部分详细介绍了这些常见的测试方法,您可以在此处阅读:https://realm.io/docs/swift/latest/#avoid-linking-realm-and-tested-code-in-test-targets

关于ios - 单元测试 Swift 2.0、@testable 导入和方案目标问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32273954/

相关文章:

php - Symfony 单元测试自定义事件监听器

ios - 删除 UIImageView

ios - 从 UIMenuController 中删除复制、查找和共享

iOS SwiftUI - 使用 PhotosPicker 从图库中选择图像或视频

ios - 在 spriteKit swift 中使用 waitForDuration()

unit-testing - 如何为 Ember.js 适配器/序列化器创建单元测试?

python - 如何从 setup.py (setuptools) 中运行我的测试?

ios - 有谁知道我如何找到 IOS5 Iphones/ipod 的 header 。越狱开发

iphone - 在iPhone App中获取Facebook用户名

ios - 如何检测滑动以查看通知或控制面板