测试时如何断言异步引发错误?

时间:2019-10-30 21:20:53

标签: swift unit-testing xctest

我们可以使用XCTAssertThrowsError测试抛出的错误。可以使用expectation测试异步事物。我有一些方法可以将工作分派到后台线程,并且有时会引发错误。

是否有可能在将来某个地方引发错误?我认为我需要结合expectationXCTAssertThrowsError,但是我不知道如何。

复制项目:https://github.com/Jasperav/ThrowingAsyncError。只需克隆项目并运行测试,其中一项将失败。我创建了一个类,该类将在分配后几秒钟后崩溃。我想确保它在几秒钟后仍然崩溃,所以我需要一个测试用例。

1 个答案:

答案 0 :(得分:0)

我查看了复制项目,以了解您要在这里完成的工作...

  

据我了解:

     
    

XCTAssertThrowsError 是包含可以抛出的块的断言。他们只是碰巧断言,同步块运行完成后会在该块中引发错误。

         

XCTestExpectation 是用于跟踪是否满足所请求条件的类。它们是用于跟踪异步代码行为的对象/引用,需要稍后保存和检查。

  
     

您似乎想做的是使 XCTestExpectation 之类的东西与 XCTAssertThrowsError 的工作方式相同,就像做出同步断言一样异步块将引发。由于代码如何运行和返回,因此无法完全正常工作。

您引用的异步代码不会抛出(计时器初始化程序)。据我所知,没有任何异步块可以抛出。也许您应该问的问题是,我们如何才能使同步操作有时选择同步运行,而在感觉......时异步运行呢?

或者,为了在每个要测试的类中增加一些复杂性,我已经制定了一个解决方案,其几乎是最低的要求,以使其易于测试和可移植...

  

https://github.com/Jasperav/ThrowingAsyncError/pull/1/files

     

我可以问你为什么要做这样的事情吗?

相关问题