我在尝试用 swift 编写一些 UT 时遇到了问题我有一个带有扩展的协议,它可以“做事情”:protocol MyProtocol:class{var myVar:SomeClass {get} func doStuff(
我在尝试用 swift 编写一些 UT 时遇到了问题
我有一个带有“执行操作”扩展的协议:
protocol MyProtocol: class
{
var myVar: SomeClass { get }
func doStuff(identifier: String) -> Bool
}
extension MyProtocol
{
func doStuff(identifier: String) -> Bool {
return true
}
}
然后是一个实现我的协议的类
final class MyClass: MyProtocol {
}
这个类有一个扩展,它实现了另一个协议,其中有一个我应该测试的方法
public protocol MyOtherProtocol: class {
func methodToTest() -> Bool
}
extension MyClass: MyOtherProtocol {
public func methodToTest() {
if doStuff() {
return doSomething()
}
}
}
有没有办法用这种设置来模拟 doStuff 方法?
处理协议而不是类是一种很好的做法。因此,你可以扩展协议,而不是扩展类
extension MyOtherProtocol where Self: MyProtocol {
public func methodToTest() {
if doStuff() {
return doSomething()
}
}
}
因此您的扩展将知道 doStuff 存在,但不知道其实现。然后让您的类符合两者。
extension MyClass: MyOtherProtocol {}
因此在模拟中你可以实现
class MyMockClass: MyProtocol, MyOtherProtocol {
func doStuff() -> Bool {
return true
}
}