1

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

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

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

然而解决方案看起来,我想要的是能够将我的应用程序指向我的夹具文档以进行测试,以便我可以直接测试加载、保存、版本控制和其他类似的事情。

4

1 回答 1

2

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

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

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

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

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

于 2014-12-19T11:39:24.847 回答