Xcode - 将图像添加到测试中?

时间:2015-02-04 18:15:21

标签: ios xcode swift

我正在为Swift应用程序编写测试。在此期间我需要测试处理图像。我想添加一个示例图像进行测试。根据我的理解,这似乎是错误的,我应该能够将图像直接拖到Xcode的ProductNameTests目录中。这会将图像添加到测试目标中。然后我尝试得到图像的路径:

let imagePath = NSBundle.mainBundle().pathForResource("example_image", ofType: "jpg")

不幸的是,这总是返回nil。我究竟做错了什么?谢谢!

4 个答案:

答案 0 :(得分:5)

您的问题是,您在主包中搜索图像。因此,当您访问图像不存在的mainBundle时,因为它位于测试包中。

所以你需要访问另一个包。嵌套测试类的包。

为此,请使用bundleForClass代替mainBundle

//The Bundle for your current class
var bundle = NSBundle(forClass: self.dynamicType)
var path = bundle.pathForResource("example_image", ofType: "jpg")

如您所见,为您的课程加载NSBundle,您现在应该可以访问该图片了。您还可以将图像添加到主目标并再次使用mainBundle

答案 1 :(得分:2)

在Swift 3中,我正在使用此方法在测试中加载图像:

func loadImage(named name: String, type:String = "png") throws -> UIImage {
    let bundle = Bundle(for:type(of:self))
    guard let path = bundle.path(forResource: name, ofType: type) else {
        throw NSError(domain: "loadImage", code: 1, userInfo: nil)
    }
    guard let image = UIImage(contentsOfFile: path) else {
        throw NSError(domain: "loadImage", code: 2, userInfo: nil)
    }
    return image
}

然后我在测试中使用:

let image = try loadImage(named:"test_image", type: "jpg")

答案 2 :(得分:0)

在Swift 4中,您可以像这样

let testImage = UIImage(named: <#Image Name String#>, in: Bundle(for:<#Class Name#>.self), compatibleWith: nil)

这正在为我从xcassest中获取图像,这是我的测试目标和主要目标的一部分

我在setUp()函数中使用它传递给我需要测试的图像处理类

答案 3 :(得分:0)

无法使用 Images.xcassets 。在这种特殊情况下,您需要在XCode中创建组(文件夹),然后将图像添加到文件夹中(请确保通过单击“如果需要复制项目”将图像复制到“复制捆绑资源”中)。然后:

Swift 5.x:

start "" "C:\Program Files\Blender Foundation\Blender\Blender.exe"
image.jpeg

并确保将图像检入测试目标。