ios Xcode 6 में XCTest और अतुल्यकालिक परीक्षण




(4)

तो Apple ने Xcode 6 के रिलीज़ नोट में कहा कि अब हम XCTest के साथ सीधे एसिंक्रोनस परीक्षण कर सकते हैं।

किसी को भी पता है कि यह कैसे करना है Xcode 6 बीटा 3 (उद्देश्य-सी या स्विफ्ट का उपयोग करके)? मैं ज्ञात सेमाफोर विधि नहीं चाहता, लेकिन नया Apple तरीका है।

मैंने जारी नोट में और अधिक खोज की लेकिन मुझे कुछ नहीं मिला। XCTest हेडर बहुत स्पष्ट नहीं है।


मैंने स्विफ्ट 2 में कैसे किया

चरण 1: अपेक्षा को परिभाषित करें

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

चरण 2: अपेक्षा को पूरा करने के लिए परीक्षण को नीचे बताएं जहां आप प्रतिक्रिया पर कब्जा करते हैं

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

चरण 3: उम्मीद पूरी होने तक प्रतीक्षा करने के लिए परीक्षण बताएं

waitForExpectationsWithTimeout(10)

STEP 4: एसिंक्रोनस कॉल समाप्त होने के बाद अभिकथन करें

XCTAssertEqual(responseThatIGotFromAsyncRequest, expectedResponse)

Obj-C उदाहरण:

- (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);
        }

    }];
}

सत्र वीडियो एकदम सही है, मूल रूप से आप ऐसा कुछ करना चाहते हैं

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)
}







xctest