【问题标题】:TableView Unit Test on Asynchronous Service call异步服务调用的 TableView 单元测试
【发布时间】:2017-06-30 18:23:00
【问题描述】:

我正在为我的应用程序编写单元测试用例,该应用程序具有来自服务器的数据的 UITableView。除了numberOfRowsInSection,我已经为我的TableView 添加了测试用例。

我正在关注以下 UITableView 测试用例的链接: Xcode 5 test UITableview with XCTest Framework

谁能建议如何为numberOfRowsInSection编写一个测试用例,它显示来自异步服务调用的数据? 任何想法或示例都会非常有帮助。

【问题讨论】:

    标签: ios objective-c swift


    【解决方案1】:

    您可以使用OHHTTPStubs 并使用 json 伪造您的数据。将带有面部数据的 json 文件添加到您的项目中(注意选择正确的目标)。然后使用下一个代码来测试数据:

    import XCTest
    import OHHTTPStubs
    
    class TestSomeRequest: XCTestCase {
    
        // MARK: - Attributes
        fileprivate let endpoint = "yourendpoint"
        fileprivate let apiUrl = "yoururl"
        fileprivate let path = "yourpath"
    }
    
    
    // MARK: - Setup & Tear Down
    extension TestSomeRequest {
        override func setUp() {
            super.setUp()
            stub(condition: isHost((URL(string: apiUrl)?.host)!) && isPath(path), response: {_ in
                guard let path = OHPathForFile("TestDataJson.json", type(of: self)) else {
                    preconditionFailure("Could Not Find Test File!")
                }
                return OHHTTPStubsResponse(fileAtPath: path, statusCode: 200, headers: ["Content-Type": "application/json"])
            })
        }
    
        override func tearDown() {
            super.tearDown()
            OHHTTPStubs.removeAllStubs()
        }
    }
    
    
    // MARK: - Tests
    extension TestSomeRequest {
        func testNumberOfRowsInSection() {
            let fetchExpectation = expectation(description: "Test Fetching")
            let viewController = YourViewController()
            YourDataManager.shared.fetchData(for: endpoint, success: {
                XCTAssertEqual(viewController.tableView.numberOfRows(inSection: 0), expectedNumberOfRows, "Number Of Rows In Section 0 Should Match!")
                fetchExpectation.fulfill()
            }, failure: nil)
            waitForExpectations(timeout: 60, handler: nil)
        }
    }
    

    如果您不想伪造数据,请使用此测试方法:

    func testNumberOfRowsInSection() {
        let fetchExpectation = expectation(description: "Test Fetching")
        let viewController = YourViewController()
        YourDataManager.shared.fetchData(for: endpoint, success: {
            XCTAssertEqual(viewController.tableView.numberOfRows(inSection: 0), expectedNumberOfRows, "Number Of Rows In Section 0 Should Match!")
            fetchExpectation.fulfill()
        }, failure: nil)
        waitForExpectations(timeout: 60, handler: nil)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多