SuP*_*ter 5 unit-testing ios xctest swift
我\xe2\x80\x99m 在 swifts 中编写单元测试,并测试独特的工作流程。
\n\n在 methodA() 中,我使用异步方法错误地加载了对象(例如使用不正确的凭据)。也开启了期待
\n\n func methodA(withCred credential: NSURLCredential) {\n var objA = ObjectA()\n // Set objA.a, objA.b, objA.c, \n objA.credential = credential //Incorrect credential First time, Correct Credential second time \n objA.delegate = self \n expectation = expectationWithDescription(\xe2\x80\x9cAync\xe2\x80\x9d)\n objA.callAsyncMethod() //This fires successDelegate() or failureDelegate()}\nRun Code Online (Sandbox Code Playgroud)当 FailureDelegate() 被触发时,我重新加载对象,这次是正确的。为此,我需要再次调用 MethodA() (这样我就可以重用那里的所有其他内容)。
\n\nfunc failureDelegate(error: NSError!) {\n\nXCTAssertTrue(error.localizedDescription == \xe2\x80\x9cInvalid Credentials\xe2\x80\x9c)\n//Now that I\xe2\x80\x99ve verified correct error is returned, I need to reload objA\nmethodA(withCred:correctCredential) \n}\n\nfunc successDelegate(obj : ObjectA) {\n XCTAssert(\xe2\x80\x9cObject is loaded\xe2\x80\x9d)\n expectation.fulfill()\n}\nRun Code Online (Sandbox Code Playgroud)3.这在方法A中再次引发相同的期望,并导致以下错误:
\n\n\n\n\nAPI 违规 - 在已经处于等待模式时产生期望。
\n
我知道这是 swift 不允许的。是否有解决方法或更好的方法来使用 XCTest 测试这些与 Swift 循环的异步方法?
\n\n谢谢!
\n不要共享expectation跨测试的实例。您应该在每个测试的主体中声明expectation(即 with ),而不是作为 的属性。如果您确实需要使用委托模式(闭包会更加简单且更加传统),您可以将其作为附加参数传递给您的委托方法。letXCTestCase
| 归档时间: |
|
| 查看次数: |
4187 次 |
| 最近记录: |