如何在 Swift 中对这个自定义 UITextField 进行单元测试?
Posted
技术标签:
【中文标题】如何在 Swift 中对这个自定义 UITextField 进行单元测试?【英文标题】:How to unit-test this custom UITextField in Swift? 【发布时间】:2015-08-07 23:05:03 【问题描述】:我已经创建了一个这样的自定义 UITextField
import Foundation
import UIKit
class NoZeroTextField: UITextField, UITextFieldDelegate
required init(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
self.delegate = self
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
if (string == "0" )
//ignore input
return false
return true
我正在尝试为该类编写单元测试,但问题在于将 NSCoder 实例传递给构造函数。我无法实例化它或将其设置为零。如何对这个类进行单元测试?
【问题讨论】:
你的textField方法是内部的,不用NSCoder构造函数直接测试一下? “直接”是什么意思? 【参考方案1】:我想通了。被测类:
import Foundation
import UIKit
public class CustomTextField: UITextField, UITextFieldDelegate
required public init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
self.delegate = self
public func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
if (string == "X" )
//ignore input
return false
return true
测试本身:
import UIKit
import XCTest
import TryCustom
import Foundation
class CustomTextFieldTests: XCTestCase
func testCustomTextField()
//pass in dummy non abstract NSCoder (NSKeyedUnarchiver)
let cd = NSKeyedUnarchiver(forReadingWithData: NSMutableData())
let c = CustomTextField(coder:cd)
let result = c!.textField(c!, shouldChangeCharactersInRange: NSRange(), replacementString: "X")
XCTAssertFalse(result)
【讨论】:
以上是关于如何在 Swift 中对这个自定义 UITextField 进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章
想知道如何以编程方式在 swift 3.0 中对 UITableViewCell 进行子类化?