我们可以将@IBOutlets
和@IBAction
设置为私有。例如:
class MyViewController: UIViewController {
@IBOutlet private weak var myLabel: UILabel!
@IBAction private func nextTapped(sender: UIButton) {
// Do something
}
}
我们不能访问类之外的属性和方法,这是一件好事。
但是用私有出口和动作测试类呢?有没有什么方法可以测试XCTestCase中的私有出口或方法,或者我必须把它们暴露在类之外,使之成为内部的?
出于测试目的,@IBOutlet
s/@IBAction
s应在内部可见?
3条答案
按热度按时间esyap4oy1#
无法使用
XCTest
测试private
方法。这是因为Swift的
private
确实是私有的,编译器使用这些信息来更好地优化代码。若要测试方法,它必须是
public
或internal
,而且您可以使用@testable
汇入模块。摘录自Should I test private methods or only public ones?:
我不对私有方法进行单元测试。私有方法是一个实现细节,应该对类的用户隐藏。测试私有方法会破坏封装。
0lvr5msh2#
对IBOutlets使用private(set)。这样你可以在类外读取它,但不能修改它。
368yc8dk3#
私有方法也必须被测试,但是 * 重点是不要为了运行测试而改变被测试类中的任何东西 *。
默认情况下,您可以从单元测试访问IBOutlets,但是如果您已经将它们设置为私有的,您可以始终在测试中创建一个新的类的MockSubclass,然后公开私有内容。
在测试过程中,只需示例化mock子类并调用一个返回私有出口的函数。
小心!保持你的模拟类总是在测试目标之下。