Xcode 11中没有调用super.setUpWithError()?

12
我注意到当创建一个带有默认setUpWithError()和tearDownWithError()方法的新XCTestCase类时,不再添加对super.setUpWithError()或super.tearDownWithError()的调用... 如果我没有弄错的话,在以前,当我创建一个新的单元测试用例类(作为XCTestCase的子类)时,在默认模板类中,会调用super.setUp()和super.tearDown()方法。您知道为什么这些对超类的调用已经被删除了吗?
当创建UIViewController的子类时,默认的类模板确实会调用super.viewDidLoad()。那么为什么默认的XCTestCase模板不再有任何关于super的调用呢?

XCTest现在包括setUp()和tearDown()实例方法的抛出变体,允许在设置或拆卸期间在Swift中抛出错误。分别覆盖setUp()或tearDown()方法的setUpWithError()或tearDownWithError()方法。如果setUpWithError()抛出错误,则不会执行测试方法,如果错误是由于调用XCTSkip * API引起的,则测试将标记为跳过而不是失败。(42069831) - Grenoblois
4
@developper 谢谢。是的,我知道这个问题。现在Xcode添加了tearDownWithError()而不是tearDown()。我的问题是关于没有调用super.tearDownWithError()的情况。 - InterestedDev
3
这个问题是否得到了您的回答?[Xcode 10和super.tearDown] - JAB
1个回答

1
当测试方法运行时,setUpWithErrorsetUp都会被调用。因此,如果你重写了setUpWithError而没有重写setUp,并且你的测试情境已经在父类中有了setUp的实现,那么父类实现将被调用,你不需要调用super
(如果你的测试情境在父类中没有setUp的实现,那么一开始就不需要调用super。)
因此,模板所展示的模式是正确的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接