Unit Testing 单元测试
单元测试一般是程序员编写,用来测试特定的方法是否正常运行的小段代码程序。《Head First Java》中讲到过,在编写实现实际功能的代码前就编写好单元测试代码是一个很好的习惯,试问很多时候当你写完了一个认为功能代码后还会特意去写一段测试代码进行测试吗,估计很多时候就会跳过这步。 编写好单元测试代码不仅仅在完成功能代码时用到,当你修改了功能代码后,你可以立即使用写好的单元测试代码进行测试以保证修改后的代码对之前的功能没有影响。
Unit Testing with JUnit 使用JUnit进行单元测试
JUnit 4.x 使用标注的方法标注了哪些类的方法有对应的单元测试代码,JUnit 假设所有需要测试的方法可以以任意顺序进行测试。因此,当前测试不能依赖于其他测试代码。 使用JUnit进行测试步骤:
-
将需要测试的方法使用 @org.JUnit.Test进行标注
-
使用JUnit提供的方法检查比较期待得到的结果与实际运行后的结果
可以使用像Eclipse这样的工具或者直接使用类"org.junit.runner.JUnitCore" 进行测试。
Installation of JUnit JUnit的安装使用
从 JUnit website 下载JUnit4.x.jar 。 下载中包括JUnit 类库 "junit-4.*.jar" 。将这个类库加入到你的JAVA工程中,并且加入到classpath中()。在Eclipse中通过编辑Build Path进行加入操作。
JUnit with Eclipse / Eclipse中使用Junit
准备
创建一个新的工程"de.vogella.junit.first"。我们会将单元测试代码放入单独的文件夹中,因此再新建一个源码文件夹“test” ,通过在工程上单击右键,点击properties,然后选择左侧菜单中的“java build path”,并点击右侧的Source标签。
点击"Add folder" ,然后再天出窗口中点击"Create new folder"来创建一个“test”文件夹。
为测试代码创建一个单独的文件夹并不是强制必须要做的。但是建议最好将测试代码与正常代码分开存放。
Create a Java class / 创建JAVA类
创建“de.vogella.junit.first”包,以及下面的类:
package de.vogella.junit.first;
public class MyClass {
public int multiply(int x, int y) {
return x / y;
}
}
Create a JUnit test / 创建JUnit测试
选择你新建的那个类,右键单击->New->JUnit Test case ,更改源文件夹到JUnit的文件夹。选择“New JUnit 4 test”,并且确认你将原文件夹更改为了test。
点击next并且选择你想要进行测试的方法。
如果你没将JUnit加入你的classpath,Eclipse会提示你是否将其加入classpath中。
创建如下的测试代码:
package de.vogella.junit.first;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class MyClassTest {
@Test
public void testMultiply() {
MyClass tester = new MyClass();
assertEquals("Result", 50, tester.multiply(10, 5));
}
}
Run your test via Eclipse / 在Eclipse中执行测试
右键单击你新建的测试类,选择Run-As-> Junit Test
我们执行后应该得到一个失败的结果(从红色的进度条可以看出)。因为我们的multiplier类现在没有正确的运行(类中使用除号代替了乘号)。修改这个bug后重新执行测试,将会得到一个绿色的通过提示。
如果你有一些个测试,你可以将它们放入test suite合并执行。Test suite中的所有测试类将会在运行test suite的时候一并执行。创建一个新的test suite你可以多选需要加入test suite的测试类,并在其上单击右键,选择New-> Other -> JUnit -Test Suite 。
注意:这种新建Test Suite的方法对于基于JUnit4.x的Test Case会出现下图找不到测试类的情况。(我使用的是MyEclipse6.0,其他的版本未做测试)
P.S. 参考了这篇文章 http://www-01.ibm.com/support/docview.wss?uid=swg21363984 对于解决这个问题的方法,我们可以新建一个空的 test suite,然后手工编辑需要加入test suite的test case。
按如下方法更改test suite的代码来正确运行你的test case ,如果你开发了一些其他的test case需要一并进行测试, 你可以将它加入到@Suite.SuiteClasses 中。
package mypackage;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses( { MyClassTest.class })
public class AllTests {
}
用你自己的代码来执行测试
除了上边的方法,你当然也可以自己编写代码来灵活的进行测试,"org.junit.runner.JUnitCore"这个类提供了 runClasses()这个方法,可以用来运行一个或多个测试类。这个方法会返回一个"org.junit.runner.Result"类型的返回值对象,这个对象可以用来检索测试失败的相关的信息。
在“test”文件夹下创建一个新的类“MyTestRunner”,代码如下:(这个类会执行你的测试类并在控制台输出测试失败的相关信息)
package de.vogella.junit.first;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class MyTestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(MyClassTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
}
}
更详细的关于标记和静态引用的相关信息可以参见百度的这个文档:http://wenku.baidu.com/view/7fffb323aaea998fcc220e21.html
原文地址:http://www.vogella.de/articles/JUnit/article.html
文章后关于标记和静态引用方法的信息未进行翻译,可以查阅上述百度文档,文章经过少许编辑,添加了个人经过测试的一些说明。