setUptearDown(@ Before@ After)为什么我们在JUnit中需要它们?

setUptearDown(@ Before@ After)为什么我们在JUnit中需要它们?,第1张

setUp / tearDown(@ Before / @ After)为什么我们在JUnit中需要它们?

这篇(旧的)JUnit最佳实践文章将其描述如下:

不要使用测试用例构造函数来设置测试用例

在构造函数中设置测试用例不是一个好主意。考虑:

      public class SomeTest extends TestCase>        public SomeTest (String testName) {>super (testName);>// Perform test set-up>        }>     }

想象一下,在执行设置时,设置代码会抛出一个

IllegalStateException
。作为响应,JUnit将抛出一个
AssertionFailedError
,指示无法实例化该测试用例。这是生成的堆栈跟踪的示例:

>     junit.framework.AssertionFailedError: Cannot instantiate test case:> test1  >         at junit.framework.Assert.fail(Assert.java:143)>         at junit.framework.TestSuite.runTest(TestSuite.java:178)>         at junit.framework.TestCase.runBare(TestCase.java:129)>         at junit.framework.TestResult.protect(TestResult.java:100)>         at junit.framework.TestResult.runProtected(TestResult.java:117)>         at junit.framework.TestResult.run(TestResult.java:103)>         at junit.framework.TestCase.run(TestCase.java:120)>         at junit.framework.TestSuite.run(TestSuite.java, Compiled Code)>         at junit.ui.TestRunner2.run(TestRunner.java:429)

该堆栈跟踪被证明是无用的。它仅表示无法实例化测试用例。它没有详细说明原始错误的位置或来源。信息的缺乏使得很难推断出异常的根本原因。

代替在构造函数中设置数据,而是通过覆盖进行测试设置

setUp()
setUp()
正确报告任何抛出的异常。将此堆栈跟踪与之前的示例进行比较:

>     java.lang.IllegalStateException: Oops>         at bp.DTC.setUp(DTC.java:34)>         at junit.framework.TestCase.runBare(TestCase.java:127)>         at junit.framework.TestResult.protect(TestResult.java:100)>         at junit.framework.TestResult.runProtected(TestResult.java:117)>         at junit.framework.TestResult.run(TestResult.java:103)>         ...

该堆栈跟踪信息更多。它显示了引发了哪个异常(

IllegalStateException
)以及从何处引发的异常。这使得解释测试设置的失败变得容易得多。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5475463.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存