gpt4 book ai didi

macos - 测试目标中 Assets 目录中的 NSImage

转载 作者:行者123 更新时间:2023-12-01 18:57:06 26 4
gpt4 key购买 nike

我的单元测试目标需要加载图像资源以在某些测试中使用,但我在加载它时遇到问题。

  1. 我已在测试目标中创建了一个 Assets 目录
  2. 我已将新的图像集资源添加到目录中,选中“设备”中的“Mac”框,并为两种分辨率(@1x 和@2x)设置其源图像:

enter image description here

  • 我已经检查了测试目标的“复制捆绑资源”构建阶段,它确实包含 Assets 目录。

  • 我检查了 Assets 目录和图像集的目标成员资格,确实是测试目标。

  • <小时/>

    运行测试时,我尝试使用如下代码加载图像:

    guard let image = NSImage(named: NSImage.Name("TestSourceImage")) else {
    fatalError("Test Resource is Missing.")
    }

    ...但是守卫失败了。

    我也尝试过:

    let bundle = Bundle(for: MyClassTests.self)

    guard let path = bundle.pathForImageResource(NSImage.Name("TestSourceImage")) else {
    fatalError("Test Resource is Missing.")
    }

    guard let image = NSImage(contentsOfFile: path) else {
    fatalError("Test Resource File is Corrupt.")
    }

    ...但是第一个守卫失败(无法检索资源路径)。

    两种格式我都尝试过

    NSImage.Name("TestSourceImage")

    和:

    NSImage.Name(rawValue: "TestSourceImage")

    我也尝试过Bundle.urlForImageResource(_) ,但也失败了。

    <小时/>

    我见过类似的问题和答案,但它们要么适用于 iOS,要么适用于 应用(主) bundle 中的资源。

    我错过了什么?

    <小时/>

    更新:

    在此期间,我通过将测试图像添加为独立图像资源(使用 Assets 目录)并加载来解决了这个问题使用以下代码:

    let bundle = Bundle(for: MyClassTests.self)
    guard let url = bundle.url(forResource: "TestSourceImage", withExtension: "png") else {
    fatalError("!!!")
    }
    guard let image = NSImage(contentsOf: url) else {
    fatalError("!!!")
    }

    在这种情况下,我不需要支持多种分辨率(我的图像是图像处理算法的源;它已经被假定为所需的最高分辨率),即使我支持,我也会切换我猜从 .png.tiff

    问题似乎是,NSImage是否没有具有类似于 UIImage 的初始化程序的init(named:in:compatibleWith:) ,它允许您指定从中加载图像的 bundle (第二个参数)。

    您可以改为要求特定包( main 除外)创建资源 URL 并从中实例化图像(就像我上面所做的那样),但这似乎与 Assets 目录不兼容。 欢迎提供更多信息...

    最佳答案

    Bundle 上有一个扩展,允许从 Assets 目录加载命名图像:

    extension Bundle {
    @available(OSX 10.7, *)
    open func image(forResource name: NSImage.Name) -> NSImage?
    }

    引用您的示例,您可以在 XCTestCase 中使用以下内容来访问图像(Swift 5):

    guard let image = Bundle(for: type(of: self)).image(forResource: "TestSourceImage") else {
    fatalError("Test Resource is Missing.")
    }

    在 macOS 10.14 上测试。

    关于macos - 测试目标中 Assets 目录中的 NSImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49421439/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com