我有一个产品类(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 })
}
}