XCTest and asynchronous testing in Xcode 6

廉价感情. 提交于 2019-12-17 07:20:42

问题


So Apple said in the release note of Xcode 6 that we can now do asynchronous testing directly with XCTest.

Anyone knows how to do it using Xcode 6 Beta 3 (Using objective-C or Swift)? I don't want the known semaphore method, but the new Apple way.

I searched into the released note and more but I found nothing. The XCTest header is not very explicit either.


回答1:


Obj-C example:

- (void)testAsyncMethod
{

    //Expectation
    XCTestExpectation *expectation = [self expectationWithDescription:@"Testing Async Method Works!"];

    [MyClass asyncMethodWithCompletionBlock:^(NSError *error, NSHTTPURLResponse *httpResponse, NSData *data) {

        if(error)
        {
            NSLog(@"error is: %@", error);
        }else{
            NSInteger statusCode = [httpResponse statusCode];
            XCTAssertEqual(statusCode, 200);
            [expectation fulfill];
        }

    }];


    [self waitForExpectationsWithTimeout:5.0 handler:^(NSError *error) {

        if(error)
        {
            XCTFail(@"Expectation Failed with error: %@", error);
        }

    }];
}



回答2:


The sessions video is perfect, basically you want to do something like this

func testFetchNews() {
    let expectation = self.expectationWithDescription("fetch posts")

    Post.fetch(.Top, completion: {(posts: [Post]!, error: Fetcher.ResponseError!) in
        XCTAssert(true, "Pass")
        expectation.fulfill()
    })

    self.waitForExpectationsWithTimeout(5.0, handler: nil)
}



回答3:


Session 414 covers async testing in Xcode6

https://developer.apple.com/videos/wwdc/2014/#414




回答4:


How I did in swift2

Step 1: define expectation

let expectation = self.expectationWithDescription("get result bla bla")

Step 2: tell the test to fulfill expectation right below where you capture response

responseThatIGotFromAsyncRequest = response.result.value
expectation.fulfill()

Step 3: Tell the test to wait till the expectation is fulfilled

waitForExpectationsWithTimeout(10)

STep 4: make assertion after async call is finished

XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)


来源:https://stackoverflow.com/questions/24704338/xctest-and-asynchronous-testing-in-xcode-6

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!