【问题标题】:Testing private @IBOutlets and @IBActions测试私有 @IBOutlets 和 @IBActions
【发布时间】:2016-10-05 07:37:55
【问题描述】:

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

class MyViewController: UIViewController {

    @IBOutlet private weak var myLabel: UILabel!

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

}

我们无法在类之外访问这些属性和方法,这很好。

但是使用私人渠道和行动的测试课程呢?有什么方法可以测试 XCTestCase 中的私有插座或方法,或者我必须将它们暴露在内部类之外?

出于测试目的,@IBOutlets/@IBActions 应该在内部可见吗?

【问题讨论】:

标签: ios swift xctest


【解决方案1】:

没有办法用XCTest 测试private 方法。

这是因为 Swift 的 private 确实是私有的,编译器使用这些信息来更好地优化您的代码。

要测试一个方法,它必须是publicinternal,您可以使用@testable 导入您的模块。

摘自Should I test private methods or only public ones?

我不对私有方法进行单元测试。私有方法是一个实现细节,应该对类的用户隐藏。测试私有方法会破坏封装。

【讨论】:

  • 但是私有方法并没有摆脱错误的咒语。
【解决方案2】:

还必须测试私有方法,但重点是不改变被测类中的任何内容以运行测试

默认情况下,您可以从单元测试中访问 IBOutlets,但如果您将它们设置为私有,您始终可以为您的测试类创建一个新的 MockSubclass,然后公开私有内容。

在测试期间,只需实例化您的模拟子类并调用返回您的私人插座的函数。

小心!让您的模拟课程始终处于测试目标之下。

【讨论】:

  • 你能分享一个 IBAction 和 IBOutlet 的例子吗?
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多