【发布时间】:2019-11-20 17:33:11
【问题描述】:
我在 Xcode 和 Swift 上使用测试驱动开发来开发应用程序。
我想添加定时通知提醒,以提醒人们返回应用执行操作。为此,我需要使用通知中心向我的用户请求授权。
为此,我想在我的单元测试中编写一个测试,该测试仅在共享的 UNUserNotificationCenter 实例调用其 requestAuthorization(options:completionHandler:) 方法时通过。
我尝试过模拟 UNUserNotificationCenter:
extension NotificationsExperimentsTests {
class MockNotificationCentre: UNUserNotificationCenter {
var didRequestAuthorization = false
override func requestAuthorization(options: UNAuthorizationOptions = [], completionHandler: @escaping (Bool, Error?) -> Void) {
didRequestAuthorization = true
}
}
}
但是当我尝试在测试中初始化它时,
func test_requestAuthorization_IsCalled() {
var mockNotificationCenter = MockNotificationCentre()
}
编译器告诉我:
'NotificationsExperimentsTests.MockNotificationCentre' 无法构造,因为它没有可访问的初始化程序
我不确定接下来要尝试什么,甚至不确定我正在尝试做的事情是否可行?
【问题讨论】:
-
谢谢,可惜没有,我一直在看。通过一些语法修订,它可以在 Playground 中正常工作,但是当我将它转移到单独的测试和构建目标时,它不会编译。
-
你能复制编译错误吗?
-
如果我在 testClass 的扩展中定义 MockNotificationCenter,那么我会得到:“无法将类型 'testClass.MockNotificationCenter' 的值分配给类型 'UNUserNotificationCenter'”如果我将定义移到测试类之外,我得到基本相同的消息:“无法将类型'MockNotificationCenter'的值分配给类型'UNUserNotificationCenter'”
标签: swift tdd unusernotificationcenter