【问题标题】:Redundant conformance to protocol in unit test only仅在单元测试中对协议的冗余一致性
【发布时间】:2019-10-03 18:37:33
【问题描述】:

我的应用中有一个 Objective-C 类 (MyClass)。在一个 Swift 文件中,我添加了一个扩展,使其符合NSFilePromiseProviderDelegate 协议/接口:

extension MyClass: NSFilePromiseProviderDelegate {
    public func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, fileNameForType fileType: String) -> String {
        ...
    }

    public func filePromiseProvider(_ filePromiseProvider: NSFilePromiseProvider, writePromiseTo url: URL, completionHandler: @escaping (Error?) -> Void) {
        ...
    }

    public func operationQueue(for filePromiseProvider: NSFilePromiseProvider) -> OperationQueue {
        ...
    }
}

我的应用程序编译良好,但我有一个单元测试包(在 Xcode 中过去称为“逻辑测试”包),它还编译了应用程序包之外的所有类。当我添加包含此扩展名的 Swift 文件时,我的单元测试中出现编译器错误:

<path>/NSPasteboard+ACAdditions.swift:205:18: error: redundant conformance of 'MyClass' to protocol 'NSFilePromiseProviderDelegate'
extension MyClass: NSFilePromiseProviderDelegate {
                 ^
AppName.MyClass:1:11: note: 'MyClass' declares conformance to protocol 'NSFilePromiseProviderDelegate' here
extension MyClass : NSFilePromiseProviderDelegate {
          ^

这使得 Swift 文件看起来像是两次被包含在单元测试包中,但我不知道这怎么可能。当我从文件检查器的“目标成员资格”部分取消选中单元测试目标时,我得到了该文件中未定义类的其他错误。

如何清除此问题以使我的单元测试再次编译并测试需要此文件的类?

【问题讨论】:

  • 我遇到了同样的问题,但在我的情况下,解决方法没有帮助,因为我正在尝试测试扩展的行为。 (它是对在 Objective-C 中定义的枚举的扩展,以符合 CustomStringConvertible。)
  • 两年后同样的问题。我也无法将其从测试目标中删除。找到任何解决方案了吗?
  • 在扩展 SCNVector3 的版本 12.3 (12C33) 上发现了这个

标签: ios swift xcode macos unit-testing


【解决方案1】:

作为一种解决方法,我将类扩展名移到了未包含在单元测试包中的不同文件中,因为它仅在拖放时需要,而测试不会触及。不过,我仍然很好奇是什么原因造成的,以及如何将此扩展加入我的测试中,以防万一我确实想测试它。

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 2015-12-09
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多