全面认识JUnit 4的新特征

java org.junit.runner.JUnitCore JUnit 4.SquareTest
JUnit version 4.1

.......E

There was 1 failure:
1) square[6](JUnit 4.SquareTest)
java.lang.AssertionError: expected:<48> but was:<49>
at org.junit.Assert.fail(Assert.java:69)

FAILURES!!!
Tests run: 7, Failures: 1
  在此,共执行了7个测试,好象编写了7个单独的square方法。注意,在我们的测试中出现了一个失败,因为7的平方是49,而不是48。

  (四) 测试集

  为了在JUnit 3.8的一个测试集中运行若干测试类,你必须在你的类中添加一个suite()方法。而在JUnit 4中,你可以使用注解来代之。为了运行CalculatorTest和SquareTest,你需要使用@RunWith和@Suite注解编写一个空类。

package JUnit 4;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses({
CalculatorTest.class,
SquareTest.class
})
public class AllCalculatorTests {}
  在此,@RunWith注解告诉JUnit它使用org.junit.runner.Suite。这个运行机允许你手工地构建一个包含测试(可能来自许多类)的测试集。这些类的名称都被定义在@Suite.SuiteClass中。当你运行这个类时,它将运行CalculatorTest和SquareTest。其输出是:

java -ea org.junit.runner.JUnitCore JUnit 4.AllCalculatorTests
JUnit version 4.1
...E.EI.......E
There were 3 failures:
1) subtract(JUnit 4.CalculatorTest)
java.lang.AssertionError: expected:<9> but was:<8>
at org.junit.Assert.fail(Assert.java:69)
2) divide(JUnit 4.CalculatorTest)
java.lang.AssertionError
at JUnit 4.CalculatorTest.divide(CalculatorTest.java:40)
3) square[6](JUnit 4.SquareTest)
java.lang.AssertionError: expected:<48> but was:<49>
at org.junit.Assert.fail(Assert.java:69)
FAILURES!!!
Tests run: 11, Failures: 3
  (五) 测试运行机

  在JUnit 4中,广泛地使用测试运行机。如果没有指定@RunWith,那么你的类仍然会使用一个默认运行机(org.junit.internal.runners.TestClassRunner)执行。注意,最初的Calculator类中并没有显式地声明一个测试运行机;因此,它使用的是默认运行机。一个包含一个带有@Test的方法的类都隐含地拥有一个@RunWith。事实上,你可以把下列代码添加到Calculator类上,而且其输出结果会完全一样。

import org.junit.internal.runners.TestClassRunner;
import org.junit.runner.RunWith;
@RunWith(TestClassRunner.class)
public class CalculatorTest {
...
}
  在@Parameterized和@Suite的情况下,我需要一个特定的运行机来执行我的测试用例。这就是为什么我显式地注解了它们。
posted @ 2009-10-26 20:30  杨子宜  阅读(337)  评论(0编辑  收藏  举报