对具有第三方依赖关系的服务进行单元测试

时间:2018-12-21 13:39:38

标签: ios swift unit-testing

我有一个身份验证服务,我用它来检查用户的身份验证状态,签入/签出用户并执行任何需要讲出身份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,如果不需要的话,我不希望这样做。

0 个答案:

没有答案