繁体   English   中英

如果在 Swift 中触发了另一个 function,如何编写将通过的单元测试

[英]How to write a unit test which will pass if another function was triggered in Swift

所以我有一个简单的用户验证 function 并且我想编写关于它的单元测试。 我希望它仅在触发另一个 function时通过,我该如何编写这个逻辑?

这是 function

func validateUser(request: Login.UserValidation.Request) {
    // unwrapping email and password above this
    if email == "" || password == "" {
        presenter?.presentUserValidationOutcome(response: response)
    }

这是我想写的单元测试

func test_validateUserFailure() {
    // Given
    let email = "test"
    let password = ""

     // When
     sut.validateUser(request: Login.UserValidation.Request(email: email, password: password))
        
     // Then
     // check if it triggered presenter's function
    }

找到了答案。 问题是模拟符合协议的 class,该协议符合 class,我们的目标是 function。 之后,我们可以检查 function 是否是通过使用变量(例如loginWasCalled = true )触发的,然后在单元测试中检查是否为真时,我们必须将演示者转换为模拟的演示者,在这种情况下作为 MockedLoginPresenter。 这是代码示例

嘲笑 class:

class MockedLoginPresenter {
    var presenterWasCalled = false
}

extension MockedLoginPresenter: LoginPresentationLogic {
    func presentUserValidationOutcome(response: MentalHealthApp.Login.UserValidation.Response) {
        presenterWasCalled = true
    }
}

单元测试:

func test_validateUserFailure() {
    // Given
    let email = "test"
    let password = ""
    
    // When
    sut.validateUser(request: Login.UserValidation.Request(email: email, password: password))
    
    // Then
    XCTAssertTrue((sut.presenter as! MockedLoginPresenter).presenterWasCalled, "Both fields are filled therefore it will first call loginUser function before triggering the presenter function")
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM