Swift 单元测试 - 等待 viewDidLoad

Posted

技术标签:

【中文标题】Swift 单元测试 - 等待 viewDidLoad【英文标题】:Swift Unit Test- Wait for viewDidLoad 【发布时间】:2017-02-01 13:27:32 【问题描述】:

我是 Swift 单元测试的新手。现在我想测试我的 viewController。在 viewDidLoad 我有一个异步调用。因此,如果我想测试我的控制器是否正确加载了数据,则数据没有加载。我已经读到我必须构建一个 XCTestExpectation。

所以我掌握的信息,是从这个问题中得到的:XCTest Unit Test data response not set in test after viewDidLoad

答案有一个例子,我不知道如何实现。我的测试类如下所示:

import XCTest
@testable import apirequest

class SearchedForViewControllerTests: XCTestCase 
    var vc: SearchedForViewController!

    override func setUp() 
        super.setUp()

        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        vc = storyboard.instantiateViewController(withIdentifier: "SearchedForViewController") as! SearchedForViewController

        vc.passedString = "garten"
        let _ = vc.view
    

    func testArticlesShwon() 
        print(vc.tableView.numberOfRows(inSection: 0))
        

因此,如果我查看自己的代码,viewDidLoad 的部分发生在

let _ = vc.view

如果我想建立一个期望,我必须等待这部分。但该部分不是函数。所以我不知道如何告诉我的期望在加载后实现。

【问题讨论】:

【参考方案1】:

这可能更像是一个意见/设计答案,但我强烈建议您完全分开测试您的 ViewController 和您的模型。

例如当你测试你的 VC 时,在你的测试中手动设置数据,然后分别进行测试以确保你的模型和任何网络/异步调用正常运行。

【讨论】:

以上是关于Swift 单元测试 - 等待 viewDidLoad的主要内容,如果未能解决你的问题,请参考以下文章

异步等待失败 swift API 请求

IOS Swift UITableView - 无法解释的边距 - 如何摆脱?

UI 测试 UIPasteboard

Swift2 UI 测试 - 等待元素出现

Swift UI测试 - 等待元素出现

单元测试用例 - Swift 3.2