ios - 如何断言在我的单元测试中调用了委托
问题描述
我想根据演示者的检查结果调用正确的委托方法。
嘲笑了我IdentityProvider
的返回真之后,我将如何编写一个测试来断言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)
}
}
解决方案
你需要做一些技巧。StartPresenterDelegate
为您的协议示例创建 MockDelegateClass :
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
}
对于不同的状态,您需要不同的测试,对您来说,这将是测试委托调用的最简单方法。
推荐阅读
- angular - 数据库中的数据正在更新,但在前端未显示
- c# - 不了解类属性
- webpack - 如何构建一个修改 `webpack.config.js` 内容的 Webpack 插件?
- python - Discord 机器人不更新状态
- python - Python集去重对比
- node.js - 如何防止/分离 STDIN 消息被新的 console.logs 切片?
- r - 运行闪亮的应用程序以创建预测模型和相应的图时出错
- python-3.x - 使用 python 3.8 时出现脚本错误,但错误显示 python 应该大于 python 2.7
- javascript - Vue JS - 如何使用按钮创建颜色切换器
- javascript - 将不存在的布尔值推送到状态并跨组件共享