簡體   English   中英

如何使用XCTest在以編程方式添加的UIView上測試UILabel

[英]How to test a UILabel on a programatically added UIView with XCTest

我想測試我的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

我希望這可以解釋我的問題,並且你們中的任何人都可以幫助我,或者為我指明正確的方向!

Thx✌️

您可以使用accessibilityIdentifier做到這一點

請參閱: iOS XCUITests通過可訪問性訪問元素

一位軟件開發人員告訴我一個很酷的解決方案! 您需要將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")
    }
}

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM