通过 "identical to" 灵活匹配结构

Nimble matching of struct via "identical to"

我在单元测试期望映射中使用 nimble,并且有一个关于比较结构的问题。

我观察到的是匹配的 .to(be(x)) 对结构根本不起作用。所以下面的单元测试失败了:

func someTest() {
    struct Struct {
        let a: String
        let b: String
    }
    let structure = Struct(a: "a", b: "b")
    expect(structure).to(be(structure))
}

这是否意味着写时复制机制在这里启动并且我们正在查看 2 个副本?为什么该测试失败?

be()函数实际上调用了beIdenticalTo,它使用了指针相等性检查,所以它只对引用类型有效。见 BeIdenticalTo source code.

你应该让 Struct 符合 Equatable 并使用 equal 代替。

func someTest() {
    struct Struct: Equatable {
        let a: String
        let b: String
    }
    let structure = Struct(a: "a", b: "b")
    expect(structure).to(equal(structure))
}