前言
junit用于JAVA单元测试,本教程主要结合eclipse来使用。
创建项目,添加junit依赖
用maven创建一个普通JAVA项目,可参考http://blog.csdn.net/happyteafriends/article/details/7449642#t10
这里创建如下结构的几个类,
pom.xml中添加junit依赖
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
代码如下:
package test.p1;
public class ClassA {
public int methodA(int a,int b){
return a + b;
}
public int methodB(int a,int b){
return a - b;
}
}
package test.p1;
public class ClassB {
public String methodA(String a,String b){
return a + b;
}
public String methodB(String a,String b){
return methodA(a,b);
}
}
ClassC 和 ClassD 与A B相同。
创建junit case
现在给ClassA创建junit case,方法如下:
在ClassA上面点右键,new,找到junit
下一步
点击finish,同样创建ClassB的测试类,最后结构如下:
ClassATest的代码如下:
public class ClassATest {
private static ClassA classA;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
classA = new ClassA();
}
@After
public void tearDown() throws Exception {
}
@Test
public void testMethodA() {
int result = classA.methodA(1, 2);
Assert.assertEquals(3, result);
}
@Test
public void testMethodB() {
int result = classA.methodB(2, 1);
Assert.assertEquals(1, result);
}
}
其中@Before里的代码是执行每个@Test方法时候都会执行的。@After是执行完每个@Test后执行。
使用断言
在@Test中应该尽量使用断言,junit提供了重载的断言方法,包含了所有的基本类型和对象以及数组
例如上面的
Assert.assertEquals(3, result);
junit并且提供
assertThat用于匹配Matcher 对象,实现复杂的功能。参考
https://github.com/junit-team/junit/wiki/Assertions
junitCase的运行
在eclipse中运行比较简单,在outline中选中某个方法,右键,runas -->junit test即可。
如果要运行整个测试类,在outline中测试类上 右键 run as --> junit test即可,是按照方法的自然顺序依次进行单元测试。
使用test suite整合test
使用test suite可以整合多个测试类,例如,这里要整合ClassA 和 ClassB,创建TestSuite1
代码如下:
package test.p1;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ ClassATest.class, ClassBTest.class })
public class TestSuite1 {
}
TestSuite使用@RunWith(Suite.class)注解来标注即可。@SuiteClasses({ ClassATest.class, ClassBTest.class })中写入要包含的测试类。
run TestSuite1 即可测试A B两个测试类。
使用eclipse创建TestSuite1 过程如下:
选中测试类所在的包,右键-->new -->junit test suite
选中包含的类,默认会提示出此包下的测试类,
运行TestSuite1即可对A B 进行测试。
同理,我们创建TestSuite2对C D进行测试。
还可以创建总的AllTests 对TestSuite1 和 TestSuite2进行整合。
代码如下:
package test;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import test.p1.TestSuite1;
import test.p2.TestSuite2;
@RunWith(Suite.class)
@SuiteClasses({TestSuite1.class,TestSuite2.class})
public class AllTests {
}
运行AllTests 就可以对所有代码进行整合测试了。
示例下载:https://github.com/wangz/junitdemo
参考: