这篇文章简单讲解了如何在Eclipse中利用Junit 4.x和EasyMock进行单元测试。
当你阅读完这篇文章后,可以在Eclipse中使用JUnit进行单元测试。
1. 概要 1.1. 单元测试单元测试开发人员写的用于测试某一个功能的代码。单元测试可以保证程序的功能正常使用。
JUnit 4.x 是一个自动化测试的框架,最初的作者是Erich Gamma and Kent Beck。它使用Java的annotation特性来标记出需要进行测试的方法。
在JUnit中,有一个非常重要的约定:所有的测试用例都不应该依赖于其他的测试用例。
1.2. 安装下载JUnit4.x.jar可以去JUnit的官网here,并且将其添加到classpath中。
现在的Eclipse版本中已经整合了Junit,你可以直接使用。
2. 如何编写单元测试 2.1. 概览JUnit 使用annotations来区别需要进行测试的方法。
编写一个测试用例:
给需要测试的方法加上annotations:@org.JUnit.Test
如果你希望检测2个对象是否相等,使用org.JUnit.Assert.*,并调用assertEquals()。
Static imports在Java 5.0或以上版本是有效的,如:import static org.junit.Assert.*
2.2. 编写你的第一个单元测试编写Java代码:
package gpcuster.cnblogs.com;import static org.junit.Assert.assertEquals;
import org.junit.Test;
public class MyFirstJUnitTest {
@Test
public void simpleAdd() {
int result = 1;
int expected = 1;
assertEquals(result, expected);
}
} 2.3. 在Eclipse中运行你的单元测试
在Eclipse的菜单栏中选择:Run As -> JUnit test
Eclipse将通过绿色和红色的状态栏显示运行的结果。
3. 在Eclipse中使用JUnit 3.1. 准备创建一个全新的项目"de.vogella.junit.junittest"。添加一个lib目录,将junit4.jar添加到classpath中,如果希望知道如何添加classpath,其查看Adding an external library to the Java classpath in Eclipse。
接着创建一个test的源代码文件夹,如下图所示:
点击"Add folder",然后点击"Create new folder"。创建一个新的文件目录"test"。
3.2. 创建一个需要测试的类创建一个包 "gpcuster.cnblog.com"。
在包 "gpcuster.cnblog.com"中创建一个类"MyClass" 代码如下:
package gpcuster.cnblogs.com;public class MyClass {
public int multiply(int x, int y) {
return x / y;
}
} 3.3. 创建一个测试类
选中你需要测试的类,然后操作New ->JUnit Test case,再选择"New JUnit 4 test":
如果你还没有将JUnit放到你的classpath中,Eclipse将询问你是否将其加入classpath中:
测试类的代码如下:
import static org.junit.Assert.assertEquals;import org.junit.Test;
public class MyClassTest {
@Test
public void testMultiply() {
MyClass tester = new MyClass();
assertEquals("Result", 50, tester.multiply(10, 5));
}
}
鼠标右击测试类,然后选择Run-As-> Junit Test。
测试结果如图所示,你可以修改代码中存在的问题,然后再次运行。如果成功,将看到绿色的状态栏。
3.4. 创建测试集如果需要测试的用例很多,我们可以创建一个测试集,包含所有需要进行测试的测试用例。
选项需要测试的类,然后鼠标右击:New-> Other -> JUnit -Test Suite
创建的代码如下:
package gpcuster.cnblogs.com;import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses( { MyClassTest.class })
public class AllTests {
}