bru*_*uno 2 xcode unit-testing bundle swift
我正在进行单元测试,并尝试从 获取文件bundle,但在网上let bundle = Bundle(for: type(of: SecCertificate)我收到错误:
无法将类型“SecCertificate.Type.Type”的值转换为预期参数类型“AnyClass”(又名“AnyObject.Type”)
enum CertificatesMock: CertificatesType {
case myWebUrl
var host: [String] {
switch self {
case .myWebUrl:
return ["https://my.web.url/"]
}
}
var certificates: SecCertificate {
switch self {
case .myWebUrl:
let bundle = Bundle(for: type(of: SecCertificate))
return CertificatesMock.certificate(filename: "myWebUrl", bundle: bundle)
}
}
private static func certificate(filename: String, bundle: Bundle) -> SecCertificate {
if let filePath = bundle.path(forResource: filename, ofType: "cer") {
do {
let data = try Data(contentsOf: URL(fileURLWithPath: filePath))
let certificate = SecCertificateCreateWithData(nil, data as CFData)!
return certificate
} catch {
fatalError(CertificatesError.noCertificateFound.description + ": " + filename)
}
} else {
fatalError(CertificatesError.noCertificateFound.description + ": " + filename)
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我的UnitTests目标中有该文件,但不知道如何访问它。
您正在尝试从枚举访问捆绑包,但根据您的错误,它只能从对象访问AnyClass。
无法将“CertificatesMock.Type”类型的值转换为预期参数类型“AnyClass”(又名“AnyObject.Type”)
枚举(在您的情况下是CertificatesMock)不符合AnyClass,因此会出现错误。一种解决方法是定义一个具有bundle属性的类,并从那里检索它。在这种情况下它是有效的,因为BundleClass符合AnyClass
class BundleClass {
var bundle: Bundle {
return Bundle(for: type(of: self))
}
}
// To use it
let bundle = BundleClass().bundle()
Run Code Online (Sandbox Code Playgroud)
人们可能想知道该捆绑包是否可以是静态成员,因为每次需要该捆绑包时都初始化一个新成员并不是很有效,而且它也是无效的。再次,自我将是一个BundleClass.Type“不” AnyClass。
无效的!
class BundleClass {
static var bundle: Bundle {
return Bundle(for: type(of: self))
}
}
Run Code Online (Sandbox Code Playgroud)
无法将类型“BundleClass.Type.Type”的值转换为预期参数类型“AnyClass”(又名“AnyObject.Type”)
作为解决方法,您可以在枚举中声明一个类,并使用静态成员使用您创建的类来访问包:
enum CertificatesMock1 {
class BundleClass {}
static var fooBundle: Bundle { return Bundle(for: CertificatesMock1.BundleClass.self) }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1583 次 |
| 最近记录: |