作者awert ( )
看板java
标题Re: [问题] 撰写 junit Test Suite 的正确方法
时间Mon Dec 19 11:41:01 2011
我在想你可能把不少东西混在一起了
1. JUnit3和JUnit4的差别。
JUnit3 和 JUnit4 是很大的一个分水岭。
过去JUnit3使用的方式,是靠继承和特定的naming convention,利用reflection让JUnit
Runner能够分辨Test。但在Java 1.5 release後,JUnit4则是完全抛弃先前的方法,采用
宣告Annotaion的方式让Runner来分辨。也因此在JUnit4写一般的test时是用不到继承的
同时,在package name也作了修改
JUnit3是 junit.framework.*
JUnit4是 org.junit.*
而JUnit4为了相容性,jar档里仍然保有JUnit3的package和classes。
因此你的状况比较像是在同一个TestCase里把3和4的写法混用,然後还用3的Runner去跑4
的Test。基本上建议还是以4为主较好,而且JUnit3的TestCase/TestSuite其实都能在
4跑,且况把3的code migrate到4其实也不会很麻烦。
2. Parameterized test
你文章中给的"Test suite"其实不叫Test suite,是叫Paramaterized Test
code里混用了JUnit3和JUnit4的写法
以下是JUnit4的写法
@RunWith(Parameterized.class)
public class MyParameterizedTest { // No need to extend anything
@Parameters
public static Collections<Object[]> parameters() {
Object[][] parameters = new Object[][]{
{"parameter1"},
{"parameter2"}
};
return Arrays.asList(parameters);
}
private String parameter;
public MyParameterizedTest(String parameter) {
this.parameter = parameter;
}
@Test
public void test() {
System.out.println("parameter : " + parameter);
}
}
3. Test Suite
JUnit4里,TestSuite也一样是用Annotaion来标示
而且整个class也就只有Annotaion
@RunWith(Suite.class) // Treat me as a test suite!
@SuiteClasses(MyParameterizedTest.class, MyAnotherTest.class)// Run these tests
public class MyTestSuite {
}
TestSuite里也可以跑TestSuite,一样放入SuiteClasses即可
@RunWith(Suite.class)
@SuiteClasses(MyTestSuite.class)
public class AllTests {
}
====================================================
你的问题应该都在於把3和4的code混在一起使用了,希望这些简单介绍能够帮你厘清。
--
We who cut mere stones must always be envisioning cathedrals.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.27.133.188
1F:推 dream1124:推! 多亏有这篇, 我解了很多长久以来的问题, 真是感激!! 12/20 00:01
2F:推 PsMonkey:难得看到这种长文,我都要落泪了 T_T 12/20 10:43
3F:推 scarsnight:好文~~~~真是太感动了~ 12/21 11:21
4F:推 ripeSelf:路过帮推。 12/22 02:05
5F:推 wildpeanut:推 12/23 20:30
6F:推 ShadowMask:推 12/25 22:38
7F:推 PCIT:值得推荐 02/10 12:22