我在我的应用程序中有一个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文件看起来像是两次被包含在单元测试包中,但我不知道这是怎么回事。当我从文件检查器的“目标成员”部分取消选中单元测试目标时,我得到了其他错误,因为该文件中的类没有被定义。
我该如何清除这个文件,让我的单元测试再次编译,并测试需要这个文件的类?
2条答案
按热度按时间sqxo8psd1#
作为一种解决方法,我将类扩展移到了一个不同的文件中,这个文件不包含在单元测试包中,因为它只在拖放时需要,而测试不会触及它。我仍然很好奇是什么导致了这个问题,以及如何将这个扩展放到我的测试中,以防它是我确实想测试的东西。
dced5bon2#
如果一个快速的初学者偶然发现了这个问题,你正确地做了和我一样的错误:
当我试图在我的测试中访问我的类时,我得到了一个错误。所以我必须在主项目和测试项目中包含我的所有类,以便在我的测试类中使用它们。
**不要在测试项目中针对你的主类!**只在主项目中保留你的主代码。相反,将
@testable import PROJECTNAME
添加到你的测试文件中,你就可以再次访问你的主代码。希望这对你有帮助。