🔍
[Swift] Setに対してAssertEqualするときはsubstractingを使うとログが見やすい
二つのSet
が等しいかをテストしたい場合、素直にはXCTAssertEqual(setx, sety)
とやればいいのですが、この方法だと等しくなかった場合に非常にログが見づらくなります。特にSet
は順序が固定でないため、どこが違うのか全くわからないことも多いです。
そこで、setx
からsety
の元を除いたもの、sety
からsetx
の元を除いたものが、それぞれ空集合であるかを調べると、ログが見やすくなります。
func testSets() throws {
let setx = Set([0, 1, 2, 3, 4, 5])
let sety = Set([0, 1, 2, 4, 5, 6])
// これだとログが見づらい
XCTAssertEqual(setx, sety) // XCTAssertEqual failed: ("[3, 4, 0, 1, 5, 2]") is not equal to ("[4, 6, 2, 5, 0, 1]")
// こうすると違いが分かり易い!
XCTAssertEqual(setx.subtracting(sety), []) // XCTAssertEqual failed: ("[3]") is not equal to ("[]")
XCTAssertEqual(sety.subtracting(setx), []) // XCTAssertEqual failed: ("[6]") is not equal to ("[]")
}
Discussion