NSURL使用XCTest在测试包中记录路径

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

我正在尝试使用TDD和新的XCTest框架编写iOS应用程序。我的一个方法从互联网上检索一个文件(给定一个NSURL对象)并将其存储在用户的文档中。该方法的签名类似于:

- (void) fetchAndStoreImage:(NSURL *)imageUrl

我试图用这种方法编写测试,以便在没有连接到互联网的情况下不会失败。我的方法是使用NSURL调用本地文件系统中的映像的方法。

当创建一个启用了单元测试的新项目时,Tests目录有一个名为'Supporting Files'的子目录。我想这是我的测试图像应该去的地方。我的问题是,如何获得指向此目录中图像的NSURL对象,因为我不希望测试图像与应用程序捆绑在一起。

提问于
用户回答回答于

事实上,运行UnitTest时的[NSBundle mainBundle] 不是你的应用程序的路径,而是/ Developer / usr / bin,所以这不起作用。

在单元测试中获取资源的方法如下:OCUnit和NSBundle

总之,使用:

[[NSBundle bundleForClass:[self class]] resourcePath]

或者在你的情况下:

[[NSBundle bundleForClass:[self class]] resourceURL]
用户回答回答于

SWIFT 2:

let testBundle = NSBundle(forClass: self.dynamicType)
let fileURL = testBundle.URLForResource("imageName", withExtension: "png")
XCTAssertNotNil(fileURL)

SWIFT 3:

let testBundle = Bundle(for: type(of: self))
let fileURL = testBundle.url(forResource: "imageName", withExtension: "png")
查找配置的主路径和测试路径的方法:
@testable import Example

class ExampleTests: XCTestCase {

    func testExample() {
        let bundleMain = Bundle.main
        let bundleDoingTest = Bundle(for: type(of: self ))
        let bundleBeingTested = Bundle(identifier: "com.example.Example")!

        print("bundleMain.bundlePath : \(bundleMain.bundlePath)")
        // …/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents
        print("bundleDoingTest.bundlePath : \(bundleDoingTest.bundlePath)")
        // …/PATH/TO/Debug/ExampleTests.xctest
        print("bundleBeingTested.bundlePath : \(bundleBeingTested.bundlePath)")
        // …/PATH/TO/Debug/Example.app

        print("bundleMain = " + bundleMain.description) // Xcode Test Agent
        print("bundleDoingTest = " + bundleDoingTest.description) // Test Case Bundle
        print("bundleUnderTest = " + bundleBeingTested.description) // App Bundle

Xcode 6 7 8 URL将在Developer/Xcode/DerivedData就像:

file:///Users/
  UserName/
    Library/
      Developer/
        Xcode/
          DerivedData/
            App-qwertyuiop.../
              Build/
                Products/
                  Debug-iphonesimulator/
                    AppTests.xctest/
                      imageName.png

它是独立于Developer/CoreSimulator/Devicesurl

file:///Users/
  UserName/
    Library/
    Developer/
      CoreSimulator/
        Devices/
          _UUID_/
            data/
              Containers/
                Bundle/
                  Application/
                    _UUID_/
                      App.app/

扫码关注云+社区

领取腾讯云代金券