【问题标题】:XCTest and using mock objects as notification receiversXCTest 并使用模拟对象作为通知接收器
【发布时间】:2015-11-06 19:43:04
【问题描述】:

在 XCTest 中,您可以在需要它的测试函数中定义模拟对象。就像这样

func testFunction(){
    class mockClass: AnyObject{
        func aFunction(){
        }
    }
}

我正在尝试使用这些模拟对象来测试另一个函数是否在给定特定条件下发出正确的通知(在我的例子中,成功通知是用 204 状态代码广播到一个对象的。

我遇到的问题是,即使 deletedSuccess() 函数显然存在,我也会收到“无法识别的选择器”运行时错误/

这里有一些代码转储

func testDelete(){
    let expectation = expectationWithDescription("Post was deleted")

    class MockReciever : AnyObject {
        func deleteSuccess(){
            println("delete successfull")
            expectation.fulfill()
        }
    }

    let mockReciever = MockReciever()
    NSNotificationCenter.defaultCenter().addObserver(mockReciever, selector: "deleteSuccess", name: PostDeletedNotification, object: post)
    let response = NSHTTPURLResponse(URL: NSURL(), statusCode: 204, HTTPVersion: nil, headerFields: nil)
    let request = NSURLRequest()
    post.deleteCompletion(request, response: response, data: nil, error: nil)

    waitForExpectationsWithTimeout(30, handler: { (error) -> Void in
        if error != nil{
            XCTFail("Did not recieve success notification")
        } else {
            XCTAssertTrue(true, "post deleted successfully")
        }
        NSNotificationCenter.defaultCenter().removeObserver(mockReciever)
    })
}

使用像这样的模拟对象和选择器有什么我不知道的问题吗?

【问题讨论】:

    标签: ios unit-testing xctest xctestexpectation


    【解决方案1】:

    您不必实现模拟对象来测试通知。有一个-[XCTestCase expectationForNotification:object:handler:] 方法。

    这里是an answer,关于如何在不继承自 NSObject 的 Swift 类中接收来自 NSNotificationCenter 的通知。从技术上讲,这是一个重复的问题。

    【讨论】:

    • 不完全是重复的问题。我尝试制作 NSObject 和 UIViewController 的模拟对象(因为它是一个在应用程序本身中接收通知的视图控制器)并且每次都遇到相同的错误。我的问题是模拟对象是否可以用作观察者。不过我明天会尝试expectationForNotification函数,如果它有效,请告诉你
    • 辛苦了,谢谢。甚至使用完成块来测试应该在发送通知之前发生的事情
    • 是的,这是测试 NSNotificationCenter 的好方法。也有类似的方法来测试 KVO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多