首页 > 解决方案 > 使用 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 测试对于相同的。

标签: swiftunit-testinganalyticsxctestui-testing

解决方案


推荐阅读