如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel
Posted
技术标签:
【中文标题】如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel【英文标题】:How to test a UILabel on a programatically added UIView with XCTest 【发布时间】: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
。
我希望这可以解释我的问题,并且你们中的任何人都可以帮助我,或者为我指明正确的方向!
谢谢✌️
【问题讨论】:
【参考方案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")
希望有帮助!
【讨论】:
以上是关于如何使用 XCTest 在以编程方式添加的 UIView 上测试 UILabel的主要内容,如果未能解决你的问题,请参考以下文章
如何在以编程方式创建的 UIButton 上添加 padding-left?
ObjC,在以编程方式添加/删除后恢复为界面构建器自动布局约束?