如何对私有变量进行单元测试?

时间:2017-12-20 18:45:11

标签: swift unit-testing mocking

我有一个产品类(MyProduct),然后是另一个类(ProductAnalyzer),用于对一组产品执行各种选项。

我想对这些类进行单元测试。具体而言,测试产品是否为X天或更早。

已经有一个名为ProductAnalyzer.tenDaysOld()的函数可以执行此操作。只要MyProduct集合中包含ProductAnalyzer的实例,它就会进行计算。

为了运行测试,我需要一种方法以某种方式修改MyProduct实例上的时间戳,使它们超过10天。或者修改tenDaysOld()。无论哪种方式,我都猜测他们需要被嘲笑。

MyProduct中,productCreated是带时间戳和私有的。我希望保持这种方式,但这意味着它无法进行测试。如果我将其修改为公开,我可以对其进行测试,但之后我只是为了测试目的更改代码库,这与生产中的实际功能无关(不是那种不好的做法吗?)。 / p>

我有什么建议可以解决这个问题吗?

以下是显示相关代码的类的简化版本。

class MyProduct: NSObject {
    private var productCreated:Date

    init(){
        productCreated = Date()
    }
}

class ProductAnalyzer {
    static var products:[InventoryItem] = []
    static func tenDaysOld() {
        let tenDays = NSCalendar.current.date(byAdding: Calendar.Component.day, value: 10, to: Date())

        let oldProducts = ProductAnalyzer.products.filter({  $0.dateAdded.compare(tenDays!) == .orderedDescending })

    }
}

0 个答案:

没有答案