Mir*_*rek 0 dependency-injection uiviewcontroller ios xctest swift
UIViewController.viewDidLoad()在 iOS 上的单元测试方法时,每个人最喜欢的注入依赖项的方式是什么?
鉴于我的实现是:
class MyViewController: UIViewController {
var service: Service = Service()
override func viewDidLoad() {
super.viewDidLoad()
service.load()
}
}
Run Code Online (Sandbox Code Playgroud)
我的测试课是这样的:
class MyViewController Tests: XCTestCase {
var vc: MyViewController!
var serviceMock = ServiceMock()
override func setUp() {
super.setUp()
let storyboard = UIStoryboard(name: "Main", bundle: nil)
vc = storyboard.instantiateViewController(withIdentifier: "MyViewController") as! MyViewController
vc.service = serviceMock
}
}
func testThatServiceIsCalled() {
XCTAssertTrue(serviceMock.loadCalled)
}
Run Code Online (Sandbox Code Playgroud)
这里明显的问题是viewDidLoad()在我实例化 viewController 的那一刻被调用,并且测试失败,因为模拟没有正确注入。
有什么解决办法吗?
为什么需要使用storyboard来创建视图控制器?
这行不通?
func testThatServiceIsCalled() {
let vc = MyViewController()
vc.service = serviceMock
vc.viewDidLoad()
XCTAssertTrue(serviceMock.loadCalled)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2723 次 |
| 最近记录: |