这篇(旧的)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)以及从何处引发的异常。这使得解释测试设置的失败变得容易得多。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)