广交好友~~ 想要讨论的可以留下msn~~~ 希望群友网友经常能提出问题,一起解决,共同提高

setup 和 teardown

上一篇 / 下一篇  2010-11-08 18:14:32 / 个人分类:白盒

JUnit 3 测试运行程序(test runner)会在运行每个测试之前自动调用setUp()方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。例如,下面是摘自 XOM 的XSLTransformTest中的setUp()方法:

protected void setUp() {

System.setErr(new PrintStream(new ByteArrayOutputStream()));

inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");

}

在 JUnit 4 中,您仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫做setUp(),只要用@Before注释来指示即可,如下所示:

@Before protected void initialize() {

System.setErr(new PrintStream(new ByteArrayOutputStream()));

inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");

}

甚至可以用@Before来注释多个方法,这些方法都在每个测试之前运行:

@Before protected void findTestDataDirectory() {
inputDir = new File("data");
inputDir = new File(inputDir, "xslt");
inputDir = new File(inputDir, "input");
}

@Before protected void redirectStderr() {
System.setErr(new PrintStream(new ByteArrayOutputStream()));
}

清除方法与此类似。在 JUnit 3 中,您使用tearDown()方法,该方法类似于我在 XOM 中为消耗大量内存的测试所使用的方法:

protected void tearDown() {
doc = null;
System.gc();
}

对于 JUnit 4,我可以给它取一个更自然的名称,并用@After注释它:

@After protected void disposeDocument() {
doc = null;
System.gc();
}

@Before一样,也可以用@After来注释多个清除方法,这些方法都在每个测试之后运行。

最后,您不再需要在超类中显式调用初始化和清除方法,只要它们不被覆盖即可,测试运行程序将根据需要自动为您调用这些方法。超类中的@Before方法在子类中的@Before方法之前被调用(这反映了构造函数调用的顺序)。@After方法以反方向运行:子类中的方法在超类中的方法之前被调用。否则,多个@Before@After方法的相对顺序就得不到保证。


TAG:

 

评分:0

我来说两句

Open Toolbar