如何使用“is”操作符对Swift中Equalable的一致性进行单元测试
既然我们可以使用“is”来检查协议的一致性,那么有没有一种方法可以使用“is”操作符对equalable进行单元测试?比如:如何使用“is”操作符对Swift中Equalable的一致性进行单元测试,swift,Swift,既然我们可以使用“is”来检查协议的一致性,那么有没有一种方法可以使用“is”操作符对equalable进行单元测试?比如: struct Thing { var id: UUID } extension Thing: Equatable { static func ==(lhs: Thing, rhs: Thing) -> Bool { return lhs.id == rhs.id } } func test_ThingConformsT
struct Thing {
var id: UUID
}
extension Thing: Equatable {
static func ==(lhs: Thing, rhs: Thing) -> Bool {
return lhs.id == rhs.id
}
}
func test_ThingConformsToEquatable() {
let thing1 = Thing(id: UUID())
XCTAssert(thing1 is Equatable)
}
这会产生协议“Equatable”只能用作一般约束,因为它具有自身或关联的类型需求,我已经阅读了关于此错误的解决方法,但“is”运算符非常干净,我想找到一种使用它进行一致性单元测试的方法。谢谢 通常,作为单元测试,这没有多大意义。如果您在代码中依赖Equalable,那么如果类型不可Equalable,那么代码将无法编译。如果代码中不依赖Equalable,那么类型是否为Equalable并不重要 也就是说,如果您愿意,可以对其进行测试,也许您正试图保护一个不直接使用的公共接口。您可以通过依赖可等式一致性来测试它,强制编译失败,如果编译依赖于可等式一致性,那么它在代码中的失败方式将完全相同
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))
}
通常,作为单元测试,这没有多大意义。如果您在代码中依赖Equalable,那么如果类型不可Equalable,那么代码将无法编译。如果代码中不依赖Equalable,那么类型是否为Equalable并不重要 也就是说,如果您愿意,可以对其进行测试,也许您正试图保护一个不直接使用的公共接口。您可以通过依赖可等式一致性来测试它,强制编译失败,如果编译依赖于可等式一致性,那么它在代码中的失败方式将完全相同
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))
}
作为一个单元测试,这没有多大意义,这正是我最初考虑的。谢谢你对我删除的答案发表评论。作为一个单元测试,这没有多大意义。这正是我最初考虑的。谢谢你对我删除的答案发表评论。关于这个测试的使用。如果测试失败,这意味着什么?那么事情就不一样了。但由于您的代码是以其他方式编译的,所以您的测试将无法运行,很明显,没有任何代码依赖于事物是可平等的,因此没有必要要求它是可平等的。关于此测试的使用。如果测试失败,这意味着什么?那么事情就不一样了。但由于您的代码是以其他方式编译的,所以您的测试将无法运行,很明显,并没有任何代码依赖于事物是可平等的,所以并没有必要要求它是可平等的。