![](/img/trans.png)
[英]How to create a UITextView programatically, inside UIView that is added programatically too?
[英]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做到這一點
一位軟件開發人員告訴我一個很酷的解決方案! 您需要將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.