【问题标题】:How to test a UILabel on a programatically added UIView with XCTest如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel
【发布时间】:2018-05-11 08:56:51
【问题描述】:

我想测试我的dashboardLabel.text,但我不知道如何通过 XCTest 访问它。

DashboardView.swift 看起来像这样:

import UIKit

class DashBoardView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)

    createSubviews()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    fatalError("init(coder:) has not been implemented")
}

// MARK: - Create Subviews

func createSubviews() {
    backgroundColor = .white

    var dashboardLabel : UILabel

    dashboardLabel = {
        let label = UILabel()
        label.text = "Dashboard Label"
        label.textColor = .black
        label.frame = CGRect(x:60, y:80, width: 200, height: 30)
        label.backgroundColor = .green
        label.backgroundColor = .lightGray
        label.font = UIFont(name: "Avenir-Oblique", size: 13)
        label.textAlignment = .center
        return label
    }()

}

DashboardViewController.swift 看起来像这样:

import UIKit

class DashBoardViewController: UIViewController {

    var dashboardview = DashBoardView()

    //MARK: View Cycle
    override func loadView() {
         view = dashboardview
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        title = "DashBoard"
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

我知道如何测试DashboardViewController.swift的标题

import XCTest
@testable import DashBoard

class DashBoardTests: XCTestCase {
    func test_if_title_is_DashBoard() {

    let vc = DashBoardViewController()
    let _ = vc.view
    XCTAssertEqual(vc.navigationItem.title, "Dashboard")
}

但我完全不知道如何访问DashBoardView.swift 上的dashboardLabel

我希望这可以解释我的问题,并且你们中的任何人都可以帮助我,或者为我指明正确的方向!

谢谢✌️

【问题讨论】:

    标签: ios swift xcode xctest


    【解决方案1】:

    你可以使用accessibilityIdentifier来做到这一点

    参考:iOS XCUITests access element by accesibility

    【讨论】:

    • 我决定采取不同的方法,但感谢您的回答!
    【解决方案2】:

    一位软件开发人员告诉我一个非常酷的解决方案!您需要将 Label 声明为属性,如下所示

    private(set) var dashboardLabel = UILabel()

    现在您可以访问 XCTest 中的属性。这是有道理的,因为您只能测试可以从外部访问的东西

    import UIKit
    
    class DashBoardView : UIView {
    
        private(set) var dashboardLabel = UILabel()
    
    }
    

    XCTest文件

    import XCTest
    @testable import DashBoard
    
    class DashBoardTests: XCTestCase {
        func test_if_dashboard_label_has_title_DashBoard() {
    
            let vc = DashBoardView()
            XCTAssertEqual(vc.dashboardLabel.text, "DashBoard")
        }
    }
    

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多