如何解决如何快速对类的私有成员进行单元测试?
public class ReviewManager {
public static let shared = ReviewManager()
private static let startDateKey = "StartDate"
private static let popupLastSeenKey = "LastSeen"
private static let lastVersionPromptedForReview = "lastVersionPromptedForReview"
private(set) var startDate: Date {
get {
Date()
}
set { }
}
private(set) var lastPopupDate: Date? {
get {
}
set {
}
}
private(set) var lastVersionPromptedForReview: String {
get {
}
set {
}
}
private(set) var appCurrentVersion: String {
get {
// Get the current bundle version for the app
guard let currentVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String
else {
logError("Expected to find a bundle version in the info dictionary")
return ""
}
return currentVersion
}
set { }
}
private func requestReview() {
SKStoreReviewController.requestReview()
lastPopupDate = Date()
lastVersionPromptedForReview = appCurrentVersion
}
public func requestReviewIfPossible() {
let today = Date()
if lastPopupDate == nil {
if allowedToPresentToday() && allowedToPresentForThisversion() {
requestReview()
}
} else {
if let lastPopupDate = lastPopupDate {
if allowedToPresentToday() && allowedToPresentForThisversion() {
requestReview()
}
}
}
}
private func allowedToPresentToday() -> Bool {
let calendar = Calendar(identifier: .gregorian)
let today = Date()
let components = calendar.dateComponents([.weekday],from: today!)
return components.weekday == 5 || components.weekday == 6
}
private func allowedToPresentForThisversion() -> Bool {
let allowedToShowForThisversion = (appCurrentVersion != lastVersionPromptedForReview) ? true : false
return allowedToShowForThisversion
}
}
现在我想为这个类中的所有私有函数编写单元测试。我可以通过将访问修饰符设为
来访问此类中的私有属性私人(套装)
但是不能在类外访问私有函数。
有没有办法在 Swift 中对私有函数进行单元测试?
解决方法
完全回应@luk2302,因为您应该测试公共接口。但是如果你觉得你真的必须,也许可以考虑在私有函数周围创建一个包装函数来公开它。您可以有条件地进行编译,在本示例中仅在调试模式下进行,因此它不会污染您的生产代码:
class MyClass {
private func myPrivateFunc() -> Void {
print("Hello")
}
}
#if DEBUG
extension MyClass {
func myPublicFunc() -> Void {
myPrivateFunc()
}
}
#endif
let myClass = MyClass()
myClass.myPublicFunc()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。