在测试期间将夹具数据复制到iOS应用程序

时间:2014-12-17 02:44:28

标签: ios unit-testing fixture

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

我也可以将我的灯具数据复制到一个已知的目录(例如" / tmp / MyAppFixtures"),但是我必须能够以编程方式获取我的灯具数据的路径(例如,"〜/ Projects / MyApp / Fixtures")。我不想在低于项目根目录的路径中进行硬编码,但我无法弄清楚如何将项目置于我的单元测试中。

如果我正在使用Makefiles,我可以简单地调用/ bin / pwd或类似的东西来找出项目根目录,然后我可以在-D中使用它到编译器,但我不能看看如何通过Xcode的项目文件来做到这一点。

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

1 个答案:

答案 0 :(得分: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”子目录(如果你有一个名为“Foo”的项目和一个用于单元测试的“FooTests”目标,那么名为“Foo /”的目录FooTests / Fixtures“)上面的代码将指向Fixtures文件夹中的数据。

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