仅在单元测试中冗余符合协议

时间:2019-05-16 13:04:18

标签: ios swift xcode macos unit-testing

我的应用程序(MyClass中有一个Objective-C类。在一个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文件看起来以某种方式两次包含在单元测试包中,但是我不知道这怎么可能。当我从文件检查器的“目标成员资格”部分中取消选中单元测试目标时,对于未定义该文件中的类,我会收到其他错误。

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

1 个答案:

答案 0 :(得分:0)

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