![](/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.