【发布时间】:2015-06-10 16:01:16
【问题描述】:
据我所知,没有像我们在 objc 中使用 OCMock、Mockito 等那样快速模拟和存根方法的解决方案。
我知道here 描述的技术。在某些情况下它非常有用,但现在我陷入了僵局:)
我有一个服务层,其中我有类似合同的东西(使用此参数调用此方法将返回该对象作为回调)。这是一个(非常简化的)示例:
class Bar
{
func toData() -> NSData
{
return NSData()
}
}
class Foo
{
class func fromData(data: NSData) -> Foo
{
return Foo()
}
}
class ServerManager
{
let sharedInstance = ServerManager()
class func send(request: NSData, response: (NSData)->())
{
//some networking code unrelated to the problem
response(NSData())
}
}
class MobileService1
{
final class func Contract1(request: Bar, callback: (Foo) -> ())
{
ServerManager.send(request.toData()) { responseData in
callback(Foo.fromData(responseData))
}
}
//Contract2(...), Contract3(...), etc
}
因此在代码中的某处我有以下场景:
func someWhereInTheCode(someBool: Bool, someObject: Bar)
{
if someBool
{
MobileService1.Contract1(someObject) { resultFoo in
//self.Foo = resultFoo
}
}
else
{
//MobileService1.Contract2(...)
}
}
现在的问题是我怎么能测试这个?是否有更好的(用于测试)代码结构替代方案而不涉及合约本身?
【问题讨论】:
标签: swift unit-testing mocking