Swift中的Xcode单元测试编译时错误

Swift中的Xcode单元测试编译时错误,xcode,swift,unit-testing,types,compiler-errors,Xcode,Swift,Unit Testing,Types,Compiler Errors,Swift的高级类型检查带来了最大化编译时类型检查的整个编码实践 关于传统的单元测试与代码中的类型安全性,已经说了很多。 我发现自己站在类型安全的一边,也就是说,我一直试图让我的代码在错误使用时产生尽可能多的编译时错误 然而,我想知道的是,是否有一个很好的方法来实现单元测试类型安全性本身 当然,类型安全性错误将显示为编译时错误。 因此,这最终归结为单元测试编译时错误 用C++中的make实现这一点已经有了答案: 理想情况下,我能够做到以下几点: struct Username: Stringi

Swift的高级类型检查带来了最大化编译时类型检查的整个编码实践

关于传统的单元测试与代码中的类型安全性,已经说了很多。 我发现自己站在类型安全的一边,也就是说,我一直试图让我的代码在错误使用时产生尽可能多的编译时错误

然而,我想知道的是,是否有一个很好的方法来实现单元测试类型安全性本身

当然,类型安全性错误将显示为编译时错误。 因此,这最终归结为单元测试编译时错误

用C++中的make实现这一点已经有了答案:

理想情况下,我能够做到以下几点:

struct Username: Stringish{ ... }
struct SQLQuery: Stringish{ ... }

...

XCTAssertUncompilable{
    func foo(a: Username, b: SQLQuery) {
        ...
        if (a == b) { ... } // Error: cannot compare type Username to type SQLQuery
}

XCTAssertUncompilable{
    let user1 = Username("Joe")
    let selectAllUsers = SQLQuery("SELECT * FROM USERS")

    user1 == selectAllUsers // Error: cannot compare type Username to type SQLQuery
}
这可能比在没有Xcode端的严重支持的情况下进行黑客攻击要多得多

因此,下一个最好的方法是使用类似于之前链接中提供的解决方案的方法,即使用一些单独的脚本来测试特定文件是否可以编译。 当然,它必须能够导入适当的框架/包

我很乐意知道如何为iOS Swift制作这样一个脚本,而不需要太多麻烦

如果能在Xcode的常规测试阶段自动调用,则可获得额外积分。如果“真实”测试仅在该外部脚本也通过时通过,则会获得额外的加分