ios 正在测试private @IBOutlets和@IBActions

zi8p0yeb  于 2022-12-01  发布在  iOS
关注(0)|答案(3)|浏览(123)

我们可以将@IBOutlets@IBAction设置为私有。例如:

class MyViewController: UIViewController {

    @IBOutlet private weak var myLabel: UILabel!

    @IBAction private func nextTapped(sender: UIButton) {
        // Do something
    }

}

我们不能访问类之外的属性和方法,这是一件好事。
但是用私有出口和动作测试类呢?有没有什么方法可以测试XCTestCase中的私有出口或方法,或者我必须把它们暴露在类之外,使之成为内部的?
出于测试目的,@IBOutlet s/@IBAction s应在内部可见?

esyap4oy

esyap4oy1#

无法使用XCTest测试private方法。
这是因为Swift的private确实是私有的,编译器使用这些信息来更好地优化代码。
若要测试方法,它必须是publicinternal,而且您可以使用@testable汇入模块。
摘录自Should I test private methods or only public ones?
我不对私有方法进行单元测试。私有方法是一个实现细节,应该对类的用户隐藏。测试私有方法会破坏封装。

0lvr5msh

0lvr5msh2#

对IBOutlets使用private(set)。这样你可以在类外读取它,但不能修改它。

368yc8dk

368yc8dk3#

私有方法也必须被测试,但是 * 重点是不要为了运行测试而改变被测试类中的任何东西 *。
默认情况下,您可以从单元测试访问IBOutlets,但是如果您已经将它们设置为私有的,您可以始终在测试中创建一个新的类的MockSubclass,然后公开私有内容。
在测试过程中,只需示例化mock子类并调用一个返回私有出口的函数。
小心!保持你的模拟类总是在测试目标之下。

相关问题