我发现很难在 swift 中对结构中的方法进行存根。我目前可以使用我将在下面解释的方式来做到这一点,但我感觉不对,希望对此发表意见。
我不使用任何第三方库进行存根,而是更喜欢覆盖我需要更改其结果的特定方法。在 swift 之前,我总是使用类——所以很容易继承和覆盖我需要在我的单元测试用例中模拟的方法。
现在我的大部分构造都是结构,因为它们并不需要是引用类型。但是我不能在我的测试用例中覆盖任何方法。我目前使用如下所述的协议扩展来执行此操作 -
protocol AProtocol {
func a()
func b() // This calls a()
}
extension AProtocol {
func a(){
//Default implementation of a()
}
func b(){
//Default implementation of b() which also calls a()
}
}
struct A:AProtocol {
// Empty. struct A will be used by other classes/structs in the code
}
在我的测试用例中
struct TestA:AProtocol {
func a() {
Some mock implementation of a() so that b() can be tested
}
}
所以我的问题是 - 结构 A 没有真正需要通过协议来实现。其他任何类或结构都不会实现 AProtocol。但这是我可以模拟其单元测试方法的唯一方法。我认为关于协议扩展的 WWDC 会议也展示了这种单元测试方式,但基本上我不需要我的结构作为协议的实现。
有没有其他方法可以快速存根结构方法(不使用任何第三方库)?或者更好的方法来测试结构的方法。