Модульное тестирование сервиса, имеющего сторонние зависимости - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть Служба аутентификации , я использую ее для проверки состояния авторизации пользователей, входа / выхода пользователя и выполнения любых задач, требующих обращения к API идентификации пользователя.

ЭтоСервис использует зависимость третьей части https://github.com/evgenyneu/keychain-swift

Это позволяет нам легко работать с цепочкой для ключей.

Эта зависимость не передается через Depenancy Injection, вместо этого она импортируется и инициализируется в сервисе..

Как мне смеяться над такой вещью?

Мой текущий подход

Сервис

   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, чего я не хочу, если это не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...