如何在Swift中对私有或内部函数进行单元测试?

时间:2018-01-17 08:25:44

标签: ios swift unit-testing nib

所以我创建了一个自定义的抽象类,它继承自UIViewController(由RebloodViewController继承)的类,名为MainViewController。在这个类中,我编写了一个可重用的nib注册函数

class MainViewController: RebloodViewController {

    typealias Cell = RebloodViewController.Constants.Cell

    internal func registerNib(_ cellNib: Cell.Nib, target: UICollectionView) {

        let nib = UINib(nibName: cellNib.rawValue, bundle: nil)

        do {
            let identifier = try getCellIdentifierByNib(cellNib)
            target.register(nib, forCellWithReuseIdentifier: identifier)
        } catch {
            fatalError("Cell identifier not found from given nib")
        }
    }

    private func getCellIdentifierByNib(_ nib: Cell.Nib) throws -> String {

        var identifier: String? = nil

        switch nib {
        case .articles:
            identifier = Cell.Identifier.articles.rawValue
        case .events:
            identifier = Cell.Identifier.events.rawValue
        }

        guard let CellIdentifier = identifier else {
            throw MainError.cellIdentifierNotFound
        }

        return CellIdentifier
    }

}

对这些私人和内部功能进行单元测试的最佳方法是什么?因为我无法从测试文件中访问这些功能。

2 个答案:

答案 0 :(得分:4)

您将无法测试私人功能。但你可以测试内部的。在您导入框架的测试中,例如导入MyFramework,将其更改为:

@testable import MyFramework

答案 1 :(得分:1)

我发现答案是我们不测试私人方法。出于某种原因我们将方法设为私有,它应该由公共方法使用。我假设我们是否测试私有方法,测试使用私有方法的公共方法会更好。

我在这里找到了另一个额外的解释: https://cocoacasts.com/how-to-unit-test-private-methods-in-swift/