XCode 测试问题:“任何协议”不符合预期类型“协议”插入“as!”协议'

问题描述 投票:0回答:1

开始向补充对象添加测试

测试类代码:

class TokenAdapter {
   private let tokenProvider: TokenProviderProtocol!
   private let session: SessionProtocol!

   // MARK: - Init

   init(tokenProvider: TokenProviderProtocol, session: SessionProtocol) {
       self.tokenProvider = tokenProvider
       self.session = session
   }


protocol TokenProviderProtocol {
    func getToken(_ completion: @escaping (Result<String, Error>) -> Void)
}

protocol SessionProtocol {
    var isLoggedIn: Bool { get }
}

测试代码:

final class TokenAdapterTests: XCTestCase {
        
    func testUnauthorized() {
        ...
        
        let provider: TokenProviderProtocol = TokenProviderMocked()
        let session: SessionProtocol = SessionMocked(isLoggedIn: false)
        
        let adapter = TokenAdapter(tokenProvider: provider, session: session)
        ...
}

class TokenProviderMocked: TokenProviderProtocol {
    
    func getToken(_ completion: @escaping (Result<String, Error>) -> Void) {
        ...
    }
}

struct SessionMocked: SessionProtocol {
    private var _isLoggedIn: Bool
    
    init(isLoggedIn: Bool) {
        self._isLoggedIn = isLoggedIn
    }
    
    var isLoggedIn: Bool { _isLoggedIn }
}

在测试中,我在线上遇到下一个错误

let adapter = TokenAdapter(tokenProvider: tokenProvider, session: session)

“参数类型'任何TokenProviderProtocol不符合预期类型'TokenProviderProtocol'插入'as!TokenProviderProtocol'” enter image description here

如果我“修复”,XCode 会像这样添加

 as! TokenProviderProtocol

...(tokenProvider: tokenProvider as! TokenProviderProtocol, ...

并且 1)它没有改变任何东西 - 错误仍然存在; 2) XCode 现在建议删除

as! ...
代码 enter image description here

有什么想法吗?

xcode unit-testing testing mocking protocols
1个回答
0
投票

找到原因了,和 XCode 的提示完全无关 - File

AccessTokenAdapter
没有包含在 Tests target 中 😐

附注太困惑了,XCode 没有指出这一点🤦u200d♂️

© www.soinside.com 2019 - 2024. All rights reserved.