我有一个身份验证服务,我用它来检查用户的身份验证状态,签入/签出用户并执行任何需要讲出身份api的任务。
此服务使用第三部分依赖项https://github.com/evgenyneu/keychain-swift
这使我们可以轻松地使用钥匙串。
此依赖关系不是通过依赖关系注入传递的,而是在服务中导入并初始化的。
我应该如何嘲笑这种东西?
我目前的做法是
服务
struct AuthService {
var keyChain = KeyChainSwift()
func isLoggedIn() -> Bool {
return keyChain.hasObjectForKey(key: "AccessToken")
}
}
通过我的测试
class AuthServiceTests: XCTestCase {
func test_isLoggedIn_returnsFalseIfNoAccessTokenIsPresent() {
var sut = AuthService()
sut.keyChain = keyChainSpy()
let result = sut.isLoggedIn()
XCTAssertEqual(result, false)
}
class keyChainSpy {
func hasObjectForKey(key: String) -> Bool {
return false
}
}
}
但是这无法正常工作,因为我收到以下错误消息
无法分配类型为“ AuthServiceTests.keyChainSpy”的值来键入 'KeyChainSwift'
和
XCTAssertEqual失败:(“ true”)不等于(“ false”)-
我很困惑如何最好地测试这种东西?这种方法感觉像是强迫我做任何我想模仿的var
,如果不需要的话,我不希望这样做。