junit4的最大特色就是比之前的版本更加人性化。主要利用的是jdk5特有的Annotation,提供一些本来不属于程序的数据。Annotation使用@annotation的形式应用于代码(类、方法以及属性)。
@Before表示在测试程序执行之前先执行的代码块,但如果涉及到文件的读写操作,每一次执行都会打开、关闭文件,会影响程序速率。我们希望在所有测试之前读一次文件,在所有测试完成之后释放文件,而不是每次测试都读文件。junit4提出了@BeforeClass和@AfterClass,只是需要注意的是,每个类智能有一个方法被标注为@BeforeClass或AfterClass,且该方法必须是public以及static类型。
关于静态导入。在import关键字后面加上static关键字即可,就可以把后面类的静态方法和字段导入。
关于run方法。jUnit框架如何运行你的测试代码呢?答案是Runner。@RunWith是修饰类的。jUnit中有多个Runner方法,系统默认的@RunWith(TestClassRunner.class)。二是@RunWith(Parameterized.class),即参数化测试。假如某个方法在许多区域有参数,以成绩为例,返回值分别为(优秀、良好、一般、不及格等),则需要写4个以上的例子,这确实是一件比较麻烦的事情。告诉框架运行方法之后,我们需要提供一个参数列表,以@Parameters修饰,该方法随意命名。下一步即构造方法。三是打包测试。打包测试将需要运行的测试类集中起来,一次性测试。不过需要重写一个类,以@RunWith(Suite.class) @Suite.SuiteClasses({..,..需要测试的类}),类方法为空。
codeview:
1 @Before 2 public void setUp() throws Exception { 3 cc.clear(); 4 } 5 6 @Test 7 public void testAdd() { 8 cc.add(2); 9 cc.add(3);10 assertEquals(5, cc.getResult());11 }12 13 @Test14 public void testSubstract() {15 cc.substract(3);16 cc.substract(3);17 assertEquals("fucking wrong!",0, cc.getResult());18 }19 @Ignore20 // @Test21 public void testSqrt(){22 cc.sqrt(param);23 assertEquals(result,cc.getResult());24 }