ios - 如何为 NSNotification 编写单元测试

标签 ios unit-testing swift ios8 nsnotificationcenter

我正在快速工作,我想刷新一个页面,所以我使用通知发送它,我在一个 ViewController 中发布通知并在另一个 ViewController 中添加观察者,它工作得很好。我想要做的是 swift 向它添加单元测试。我检查了很多网站,但无法做到。我是 swift 的新手,不知道从哪里开始。

基本上工作是,当我单击按钮时发布通知,并在加载下一个 View Controller 时添加通知观察器。

如何进行单元测试

提前致谢

编辑: 代码

NSNotificationCenter.defaultCenter().postNotificationName("notificationName", object: nil)

并将观察者添加为

NSNotificationCenter.defaultCenter().addObserver(self, selector: "vvv:",name:"notificationName", object: nil)

最佳答案

XCTest有一个专门用于测试通知的类:XCTNSNotificationExpectation .您创建了这些期望之一,并在收到通知时实现了。你会像这样使用它:

// MyClass.swift
extension Notification.Name {
    static var MyNotification = Notification.Name("com.MyCompany.MyApp.MyNotification")
}

class MyClass {
    func sendNotification() {
        NotificationCenter.default.post(name: .MyNotification,
                                      object: self,
                                    userInfo: nil)
    }
}


// MyClassTests.swift
class MyClassTests: XCTestCase {
    let classUnderTest = MyClass()

    func testNotification() {
        let notificationExpectation = expectation(forNotification: .MyNotification, 
                                                           object: classUnderTest, 
                                                          handler: nil)

        classUnderTest.sendNotification()

        waitForExpectations(timeout: 5, handler: nil)
    }
}

XCTestCaseexpectation(forNotification:object:handler:)是创建 XCTNSNotificationExpectation 实例的便捷方法,但为了获得更多控制,您可以实例化一个并自行配置。参见 the docs .

关于ios - 如何为 NSNotification 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28292685/

相关文章:

ios - Swift - 如何动态固定 UITableViewHeaderFooterView 高度大小?

ios - 导航栏按钮项目 swift 的图像

ios - 使用 CGPointmake 和 NSSTimer 的非常基本的动画?

javascript - Requirejs 和 karma : cannot detect the source file

unit-testing - Surefire 不会在 src/main/java 中启动测试

ios - 是否可以在 UICollectionView 下有一个 UITableView?

android - 阻止 iOS/Android 设备锁定屏幕/节能模式

与其他测试用例一起运行时 Django 单元测试失败

swift - 转到 UINavigationController 但 rootViewController 之后的子 UIViewControllers 没有导航栏 SWIFT

swift - 如何使用字典来填充选择器 View (swift)?