回调方法的单元测试用例ios

Posted

技术标签:

【中文标题】回调方法的单元测试用例ios【英文标题】:Unit test case for call back methods ios 【发布时间】:2015-08-03 11:16:18 【问题描述】:

我的应用中有以下方法,我需要为其编写单元测试用例。 谁能建议我如何测试是否调用了成功块或错误块。

- (IBAction)loginButtonTapped:(id)sender

    void (^SuccessBlock)(id, NSDictionary*) = ^(id response, NSDictionary* headers) 
        [self someMethod];
    ;

    void (^ErrorBlock)(id, NSDictionary*, id) = ^(NSError* error, NSDictionary* headers, id response) 
        // some code
    ;

    [ServiceClass deleteWebService:@“http://someurl"
                              data:nil
                  withSuccessBlock:SuccessBlock
                    withErrorBlock:ErrorBlock];

【问题讨论】:

【参考方案1】:

您必须使用期望,这是一个相对较新引入的 API。添加它们是为了解决您现在遇到的问题,验证调用了异步方法的回调。

请注意,您还可以设置会影响测试结果的超时(例如,慢速网络连接可能会引发误报,除非您当然要检查慢速连接,尽管有更好的方法来做到这一点) .

- (void)testThatCallbackIsCalled 

    // Given
    XCTestExpectation *expectation = [self expectationWithDescription:@"Expecting Callback"];

    // When
    void (^SuccessBlock)(id, NSDictionary*) = ^(id response, NSDictionary* headers) 

        // Then
        [self someMethod];
        [expectation fulfill]; // This tells the test that your expectation was fulfilled i.e. the callback was called.
    ;

    void (^ErrorBlock)(id, NSDictionary*, id) = ^(NSError* error, NSDictionary* headers, id response) 

     // some code

    ;

    [ServiceClass deleteWebService:@“http://someurl"

                                           data:nil

                               withSuccessBlock:SuccessBlock

                                 withErrorBlock:ErrorBlock];
    ;

    // Here we set the timeout, play around to find what works best for your case to avoid false positives.
    [self waitForExpectationsWithTimeout:2.0 handler:nil];


【讨论】:

但这将是“deleteWebService”方法的单元测试。我正在寻找一种方法来测试“loginButtonTapped”方法并检查是否调用了 Success 和 Error 块。 然后使用模拟框架(例如 OCMock、OCMockito)并验证在触发“loginButtonTapped”操作时是否调用了“deleteWebService”。如果你也有回调的“期望”单元测试,那么你就被覆盖了,不是吗?

以上是关于回调方法的单元测试用例ios的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS swift 中制作登录屏幕的单元测试用例

单元测试用例 - Swift 3.2

单元测试的测试用例

python中unittest单元测试框架-加载测试用例运行测试用例生成测试报告

关于unittest单元测试框架中常用的几种用例加载方法

命令行运行Android Robotium自动化用例或单元测试用例