【问题标题】:How to override and test a dependent method in Objective C or Swift如何在 Objective C 或 Swift 中覆盖和测试依赖方法
【发布时间】:2016-11-17 05:06:20
【问题描述】:
我正在使用 XCTest 对我的 Objective C 代码进行单元测试。我必须测试又调用 B() 的方法 A()。有没有办法可以覆盖 B() 以便我可以专注于测试 A()?
下面给出一个例子。
- (void) A{
int x = [self B];
if(x == something)
{
// DoSomething
}
else
{
// DoSomething else
}
}
我的目的是测试 A() 的多个响应/返回 B() 的值。
【问题讨论】:
标签:
objective-c
swift
xcode
macos
xctest
【解决方案1】:
依赖注入是一种允许您在单元测试期间更改实现的技术。谷歌这个术语,学习如何让你的代码更可测试。
【解决方案2】:
您可以创建对象的模拟版本:
class MyClass {
func a() -> String {
return b("Hello")
}
func b(input: String) -> String {
return string.capitalizedString
}
}
class MockMyClass: MyClass {
var mockedBValue: String = ""
override func b(input: String) -> String {
return mockedBValue
}
}
// in your test:
let object = MockMyClass()
object.mockedBValue = "fdf"
let str = object.a()
//str now eqauls to "fdf"
不确定你的具体实现是什么,但这应该会给你一个提示。
你也可以看看http://ocmock.org/