在一个项目中,我们遇到了一个奇怪的问题,因为xod没有获取产品协议。
我们在常规应用中定义了以下协议:
protocol VCDismisser: class {
func dismiss(animated: Bool, completion: (() -> Void)?)
}
extension UIViewController: VCDismisser {}
在随机ViewController中我们定义:
class RandomVC: UIViewController {
lazy var vcDismisser: VCDismisser = self
}
在XCProject的测试部分中,我们需要定义以下内容:
class MockDismisser: VCDismisser {
var dismissCalled = false
func dismiss(animated: Bool, completion: (() -> Void)?) {
dismissCalled = true
}
}
在RandomVC的任何测试用例中,我们想“注入”我们的模拟:
func testSuccessfulLoginDismisses() {
let dismisser = MockDismisser()
randomVC.vcDismisser = dismisser
randomVC.viewDidLoad()
mockviewModel.loggedIn.value = LoginState.successful
XCTAssertTrue(dismisser.dismissCalled)
}
XCode现在变得非常疯狂并总是告诉我们:
我们在这里做错了什么?我们如何解决xcode是否接受它作为正确的类型?
答案 0 :(得分:0)
这里的原因是我的问题并不明显。包含扩展名和协议的文件具有测试的目标成员资格和导致xcode混淆的应用程序。删除测试的目标成员资格确实解决了这个问题。
答案 1 :(得分:-1)
尝试将Mock dissmisser投射为VCDismisser:
let dismisser: VCDismisser = MockDismisser()