swift - 使用 XCTest 编写测试用例以动态测试基于枚举的分析系统
问题描述
我刚开始使用 XCTest 编写测试,我必须编写测试用例来测试是否通过了正确的分析事件,分析系统具有类似这样的基于枚举的事件。
enum AnalyticsEvent {
case loginScreenViewed
case loginAttempted
case loginFailed(reason: LoginFailureReason)
}
分析引擎
protocol AnalyticsEngine: class {
func sendAnalyticsEvent(named name: String, metadata: [String : String])
}
执行
class AnalyticsManager {
private let engine: AnalyticsEngine
init(engine: AnalyticsEngine) {
self.engine = engine
}
func log(_ event: AnalyticsEvent) {
engine.sendAnalyticsEvent(named: event.name, metadata: event.metadata)
}
}
class someViewModel{
private let analytics: AnalyticsManager!
func viewLoaded() {
analytics.screenView(name: .loginScreenViewed)
}
}
class someViewController {
private var viewModel : someViewModel?
func viewDidLoad(){
//fires an event
viewModel.viewDidLoad()
}
我检查了几篇文章,其中提到我有一个模拟类并将触发的事件存储在事件队列数组中,并对数组断言事件。
一个基本的断言如下(这里的 eventQueue 是一个我们存储模拟事件的数组)
let event = try XCTUnwrap(analytics.eventQueue.first)
XCTAssertEqual(event.key,AnalyticsEvent.loginScreenViewed)
我想了解是否有一种方法可以标准化这种断言,我如何动态检查必须针对哪个分析事件断言模拟事件以及是否为事件设置了相应的属性以及如何进行 UI 测试对于相同的。
解决方案
推荐阅读
- css - Chrome devtools 导出的覆盖率 JSON 具有所有 CSS 并且不仅使用
- android - 如何修复在 AndroidStudio 活动中显示但不在模拟器/设备中显示的片段
- cmake - ROS-Yocto catkin_make toplevel.cmake
- docker - 首次安装 docker-machine 时找不到 docker 命令
- html - 如果按 TAB 可以触发 shift + TAB (JQuery, JS)
- python - 在python中从一个列表插入另一个列表
- excel - Power BI mobile - 如何通知最终用户数据已更改?
- snowflake-cloud-data-platform - 如何通过 ACCOUNTADMIN 停止任何 sql
- ssl - Istio:无法使用出口网关、自定义 CA 证书设置双向 TLS 发起
- visual-studio-code - C++ 高级 Lint 错误“跳过 CppCheck linter,因为 lintOn 1 不在 2 中。”