Как я могу сказать, что делегат вызван в моем модульном тесте - PullRequest
0 голосов
/ 07 февраля 2019

Я хотел бы отметить, что правильный метод делегата вызывается в зависимости от результата проверки в моем докладчике.

После того, как мой IdentityProvider сменился, чтобы вернуть true, как бы я написал тест дляassert delegate?.userIsAuthenticated() называется?

import Foundation
import InjectStory

protocol StartPresenterDelegate: class {
    func userIsAuthenticated()
    func userNeedsToAuthenticate()
}

class StartPresenter {
    weak var delegate: StartPresenterDelegate?
    weak var view: StartViewInterface!

    private lazy var identityProvider = Dependencies.identityProvider.inject()

    init(view: StartViewInterface) {
        self.view = view
    }

    private func checkUserAuthState() {
        if identityProvider.isAuthorized() {
            delegate?.userIsAuthenticated()
        } else {
            delegate?.userNeedsToAuthenticate()
        }
    }

}

extension StartPresenter: StartPresentation {
    func onViewDidLoad() {
        checkUserAuthState()
    }
}

extension StartPresenter {
    struct Dependencies {
        static let identityProvider = Injection<IdentityProviderProtocol>(IdentityProvider.shared)
    }
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Тебе нужно сделать трюк.Создайте MockDelegateClass для вашего протокола StartPresenterDelegate пример:

class MockDelegate: StartPresenterDelegate {

    var isUserIsAuthenticatedCalled = false
    var isUserNeedsToAuthenticateCalled = false

    func userIsAuthenticated() {
        isUserIsAuthenticatedCalled = true
    }

    func userNeedsToAuthenticate() {
        isUserNeedsToAuthenticateCalled = true
    }
}

, затем в своем тесте попробуйте сделать что-то подобное:

func test_MyTest() {
    // init your class StartPresenter that you wanna test
    var presenter = StartPresenter(...)
    var mockDelegate = MockDelegate()
    presenter.delegate = mockDelegate
    presenter.onViewDidLoad()

    XCTAssertTrue(mockDelegate.isUserIsAuthenticatedCalled)
    XCTAssertFalse(mockDelegate.isUserNeedsToAuthenticateCalled)
    // or change isUserIsAuthenticatedCalled and isUserNeedsToAuthenticateCalled if you expect another states
}

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

0 голосов
/ 09 августа 2019

enter image description here

Таким образом вы можете подтвердить модульный тест для делегатов в приложениях Swift

0 голосов
/ 07 февраля 2019

Вы должны смоделировать StartPresenterDelegate также следующим образом.

class MockStartPresenterDelegate: StartPresenterDelegate {
   var userIsAuthenticated_wasCalled = false 

   func userIsAuthenticated() {
       userIsAuthenticated_wasCalled = true
   }
}

Внедрить MockStartPresenterDelegate в качестве делегата и проверить, что userIsAuthenticated_wasCalled истинно

...