ios - 在测试期间将 fixture 数据复制到 iOS 应用程序

标签 ios unit-testing fixture

我的应用程序有一组固定数据,我想将其用于单元测试,但为了做到这一点,我必须将其复制到应用程序的 Documents/目录,而我不知所措以及如何以可重复的方式做到这一点。到目前为止,我所能做的就是打印一条日志消息,显示当前文档目录的位置(在模拟器中),然后手动将数据复制到该目录中。这显然不太理想。

我还可以将我的 fixture 数据复制到已知目录(例如,“/tmp/MyAppFixtures”),但随后我必须能够以编程方式获取我的 fixture 数据的路径(例如,“~/Projects”)/MyApp/Fixtures”)。我不想在低于项目根目录的路径中进行硬编码,但我不知道如何将项目根目录放入我的单元测试中。

如果我为此使用 Makefile,我可以简单地调用/bin/pwd 或类似的东西来找出项目根目录,然后我可以在编译器的 -D 中使用它,但我不知道如何通过 Xcode 的项目文件来完成此操作。

无论解决方案看起来如何,我想要的是能够将我的应用程序指向我的固定文档以进行测试,以便我可以直接测试加载、保存、版本控制和其他此类操作。

最佳答案

经过一段时间的研究,我发现,在测试环境中(即,当您执行“产品”->“测试”菜单项时),您可以在单元测试的类上使用 +[NSBundle bundleForClass] 来找到复制源文件(包括装置)的 DerivedData 目录。

在 Swift 中,这是通过以下方式完成的:

class SomeTests: XCTestCase {
    var fixturesURL: NSURL {
        get {
            let testBundle = NSBundle(forClass: self.dynamicType)
            return testBundle.URLForResource("Fixtures", withExtension: nil)!
        }
    }
}

如果您的测试目标文件夹中有一个“Fixtures”子目录(也就是说,如果您有一个名为“Foo”的项目和一个用于单元测试的“FooTests”目标,那么一个名为“Foo/FooTests/Fixtures”)上面的代码将指向您的 Fixtures 文件夹中的数据。

值得注意的是,URL 实际上是 DerivedData 中的内容,但该数据是在 Xcode 构建目标时从项目目录复制的,因此您不必担心这一点。

关于ios - 在测试期间将 fixture 数据复制到 iOS 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517546/

相关文章:

ios - IOS获取漫游状态的方法

javascript - 使用 jest 模拟多个 axios 调用

python - 有什么方法可以将参数传递到 pytest fixture 中?

python - 是否可以将参数传递给python中的拆卸 fixture ?

python - 我可以使用基于 fixture 参数 ID 的 pytest.mark.skipif 吗?

ios - 与 NSDate 比较相关的核心数据谓词

ios - 如何快速显示来自嵌套 firebase 节点的数据?

javascript - 如何测试调用 AJAX 函数而不使用 jasmine 触发它的函数?

java - 如何模拟接受类类型的泛型方法?

ios - 向 UITableViewCell 的 UIView(背景 View )添加子层会覆盖其他单元格 View 吗?