Как правило, это не имеет особого смысла в качестве модульного теста. Если вы полагаетесь на Equatable в своем коде, то если тип не Equatable, то код не скомпилируется. Если вы не полагаетесь на Equatable в своем коде, не имеет значения, является ли тип Equatable.
Тем не менее, можно протестировать это, если хотите, и, возможно, вы пытаетесь защитить публичный интерфейс, который вы не используете напрямую. Вы можете проверить его, полагаясь на соответствие Equatable, заставляя компиляцию терпеть неудачу точно так же, как в вашем коде, если она полагается на соответствие Equatable.
func isEquatable<T: Equatable>(_: T) -> Bool {
return true
}
func test_ThingConformsToEquatable() {
let thing1 = Thing(id: UUID())
XCTAssert(isEquatable(thing1))
}
Прелесть этого теста состоит в том, что в случае неудачи набор тестов даже не скомпилируется, поэтому вы сразу обнаружите ошибку.
Вы также можете пропустить создание экземпляра и просто протестировать тип напрямую:
func isEquatable<T: Equatable>(_: T.Type) -> Bool {
return true
}
func test_ThingConformsToEquatable() {
XCTAssert(isEquatable(Thing.self))
}