JUnit(单元测试)
JUnit的口号:keep the bar green to keep the code clean
1.单元测试不是为了证明您是对的,而是为了证明您没有错误。
2.测试用例(Test Case)是单元测试的一个很重要的方面。
3.Test Case 之间一定要保持完全的独立性,不允许出现任何的依赖关系。
4.DRY (Don't repeat yourself)
JUnit4
1.@Ignore 注解可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉类中的所有测试方法,当修饰测试方法时,表示忽略该测试方法。
2.参数化测试(@Parameters) 当一个测试类使用参数化运行器运行时,需要在类的声明处加上@RunWith(Parameterized.class)注解,表示该类将不使用JUnit内建的运行器运行,而使用参数化运行器运行,同时,在提供参数的方法上要使用@Parameters注解 来修饰,并且在测试类的构造方法中为各个参数赋值。
3.如果想要同时运行多个测试,需要使用两个注解:@RunWith(Suite.class)以级@Suite.SuiteClasses(),通过这两个注解分别指定使用Suite运行器来运行测试,其中的@SuiteClass中可以继续指定Suite,这样JUnit会再去寻找里面的测试类,一直找到能够执行的TestCase并且执行。
写测试类时,需要新建一个Source Folder,然后在这里面建与需要测试类所在包相同的包名,还需要加入JUnit的Jar包。
如下图所示:
我将要测试类com.junit下的Calculate类:
package com.junit;
public class Calculate
{
public int add(int a, int b)
{
return a + b;
}
public int delete(int a, int b)
{
return a - b;
}
public int dvide(int a, int b) throws Exception
{
if (b == 0)
{
throw new Exception("除数不能为零");
}
return a / b;
}
}
相当的在test下的com.junit包中新建TestCalculate类:
package com.junit;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class TestCalculate
{
private Calculate cal;
// 测试之前,只执行一次
@BeforeClass
public static void globalInit()
{
System.out.println("GlobalInit");
}
// 所有测试类运行之前
@Before
public void init()
{
cal = new Calculate();
System.out.println("init");
}
@Test
public void testAdd()
{
int result = cal.add(3, 3);
Assert.assertEquals(6, result);
}
@Test
public void testDelete()
{
int result = cal.delete(3, 1);
Assert.assertEquals(2, result);
}
@Test(expected = Exception.class)
public void testDvide() throws Exception
{
int result = cal.dvide(6, 0);
Assert.assertEquals(3, result);
}
// 所有测试类运行之后
@After
public void destory()
{
System.out.println("destory");
}
}
运行的结果:
再介绍下Suite的使用:
package com.junit;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses(
{ TestCalculate.class })
public class SuiteTest
{
}