【问题标题】:XCTAssertEqual gives me error - UIViewController.Type cannot conform to 'Equatable'XCTAssertEqual 给我错误 - UIViewController.Type 不能符合 'Equatable'
【发布时间】:2022-01-25 02:24:06
【问题描述】:

我有一个像下面这样的枚举-

enum Vehicle: String, CaseIterable {
        case car = "/car/"
        case boat = "/plane"
        case bicycle = "/bicycle/"
        case train = "/train"
        
        var targetControllerType: UIViewController.Type? {
            switch self {
            case .car:
                return FourWheelerViewController.self
            case .boat:
                return NoWheelerViewController.self
            case .bicycle:
                return TwoWheelerViewController.self
            case .train:
                return MultiWheelerViewController.self
            }
        }
}

当我进行平等检查时,它可以工作 -

if Vehicle.train.targetControllerType == MultiWheelerViewController.self {
     print("It's true")
}

但是当我尝试为它编写测试用例时 -

func testTrainTargetViewControllerType() {
        XCTAssertEqual(Vehicle.train.targetControllerType, MultiWheelerViewController.self)
}

我得到编译时错误 -

Type UIVewController.Type" canot conform to 'Equatable'.

谁能告诉我这里发生了什么以及为什么。

【问题讨论】:

    标签: ios unit-testing xctestcase equatable


    【解决方案1】:

    正如错误所说,Type 不能符合 Equatable。但是您仍然可以使用== 测试是否相等:

    func testTrainTargetViewControllerType() {
        XCTAssertTrue(Vehicle.train.targetControllerType == MultiWheelerViewController.self)
    }
    

    这通过了。但如果测试失败,它没有说明原因。我们通常会从XCTAssertEqual 收到有用的消息,因为它可以说左侧不等于右侧,所以我们可以看到这两个值。

    但是每个 XCTest 断言都有一个可选消息,我们可以在其中添加信息。因此,请添加一条消息,说明您的预期以及实际结果:

    func testTrainTargetViewControllerType() {
        XCTAssertTrue(
            Vehicle.train.targetControllerType == MultiWheelerViewController.self,
            "Expected MultiWheelerViewController, but was \(String(describing: Vehicle.train.targetControllerType))"
        )
    }
    

    强制测试失败,看看它有多大用处。如果我故意破坏代码,我会看到:

    XCTAssertTrue failed - Expected MultiWheelerViewController, but was Optional(MyProject.TwoWheelerViewController)
    

    这样,如果出现任何问题,您可以获得所需的信息来了解断言失败的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2020-12-04
      • 2013-10-11
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多