swift 仅在单元测试中冗余符合方案

jhiyze9q  于 2023-11-16  发布在  Swift
关注(0)|答案(2)|浏览(96)

我在我的应用程序中有一个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中称为“Logic Test”包),它也编译了应用程序包之外的所有类。当我添加包含此扩展的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文件看起来像是两次被包含在单元测试包中,但我不知道这是怎么回事。当我从文件检查器的“目标成员”部分取消选中单元测试目标时,我得到了其他错误,因为该文件中的类没有被定义。
我该如何清除这个文件,让我的单元测试再次编译,并测试需要这个文件的类?

sqxo8psd

sqxo8psd1#

作为一种解决方法,我将类扩展移到了一个不同的文件中,这个文件不包含在单元测试包中,因为它只在拖放时需要,而测试不会触及它。我仍然很好奇是什么导致了这个问题,以及如何将这个扩展放到我的测试中,以防它是我确实想测试的东西。

dced5bon

dced5bon2#

如果一个快速的初学者偶然发现了这个问题,你正确地做了和我一样的错误:
当我试图在我的测试中访问我的类时,我得到了一个错误。所以我必须在主项目和测试项目中包含我的所有类,以便在我的测试类中使用它们。

**不要在测试项目中针对你的主类!**只在主项目中保留你的主代码。相反,@testable import PROJECTNAME添加到你的测试文件中,你就可以再次访问你的主代码。

希望这对你有帮助。

相关问题