如何测试在视图控制器单元测试中设置私有变量的方法?
Posted
技术标签:
【中文标题】如何测试在视图控制器单元测试中设置私有变量的方法?【英文标题】:how to test methods which set private variables in viewcontroller unit testing? 【发布时间】:2019-12-12 18:16:46 【问题描述】:我有一个符合协议的 ViewController。 ViewController 具有以下私有 UI 组件: backgroundImage、logoimage、loginButton、signupButton - 所有这些都是私有的。 (因此单元测试无法访问)
如何在单元测试中测试以下协议方法的实现?我正在使用XCTestFramework
进行单元测试。
extension ViewController : ViewControllerProtocol
func setbackgroundImage(_ image: UIImage)
backgroundImage.image = image
func setLogoImage(_ image: UIImage)
logoImage.image = image
func setLoginButtontitle(_ title: String)
loginButton.setTitle(title, for: .normal)
func setSignupButtonTitle(_ title: String)
signupButton.setTitle(title, for: .normal)
protocol ViewControllerProtocol
func setbackgroundImage(_ image : UIImage)
func setLogoImage(_ image : UIImage)
func setLoginButtontitle(_ title: String)
func setSignupButtonTitle(_ title: String)
func setTitleLabel(_ title: String)
func setContinuewithoutsignupTitle(_ title: String)
【问题讨论】:
你用过XCTest Framework
吗?
是的,我正在使用 xctest 框架
您的ViewControllerProtocol
是在哪里定义的?你能分享那个代码吗?
我已经更新了问题。
您要求的只是一个示例单元测试吗?
【参考方案1】:
您仍然可以通过添加公共 getter 来对下面的这些值进行单元测试
protocol ViewControllerProtocol
func setbackgroundImage(_ image : UIImage)
func setLogoImage(_ image : UIImage)
func setLoginButtontitle(_ title: String)
func setSignupButtonTitle(_ title: String)
func setTitleLabel(_ title: String)
func setContinuewithoutsignupTitle(_ title: String)
func getbackgroundImage() -> UIImage?
func getlogoImage() -> UIImage?
func getloginButtonTitle() -> String?
func getsignupButtonTitle() -> String?
class MainTest: XCTestCase
let viewController = ViewController()
override func setUp()
super.setUp()
func testExample()
guard let testImage1 = UIImage(named: "testImage1") else
XCTFail("Could not load test image 1")
return
viewController.setbackgroundImage(testImage1)
XCTAssert(viewController.getbackgroundImage() == testImage1)
guard let testImage2 = UIImage(named: "testImage2") else
XCTFail("Could not load test image 2")
return
viewController.setLogoImage(testImage2)
XCTAssert(viewController.getlogoImage() == testImage2)
viewController.setLoginButtontitle("test")
XCTAssert(viewController.getloginButtonTitle() == "test")
viewController.setSignupButtonTitle("test")
XCTAssert(viewController.getsignupButtonTitle() == "test")
【讨论】:
是的,公共吸气剂应该可以正常工作。非常感谢。以上是关于如何测试在视图控制器单元测试中设置私有变量的方法?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XCTest 测试一个 navigationBar 是不是未在 Objective-C 中设置为特定颜色?