我的应用程序有一组固定数据,我想将其用于单元测试,但为了做到这一点,我必须将其复制到应用程序的 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/