[英]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.