- 浏览: 5166788 次
- 性别:
- 来自: 天津
博客专栏
-
实战 Groovy
浏览量:29350
文章分类
- 全部博客 (639)
- 代码之谜 (6)
- JavaScript quirks (5)
- 程序员 (92)
- Java (93)
- BT编程 (7)
- html/css (64)
- Groovy&Grails (42)
- Android (20)
- C/C++ (5)
- PHP/Perl/Python (46)
- 经典文章 (51)
- CodeIgniter (14)
- JQuery (10)
- 笑话 (4)
- 其他 (32)
- javascript (69)
- 云计算 (0)
- html5 (7)
- 面试 (8)
- google (3)
- nosql (2)
- nodejs (11)
- go (5)
- erlang (1)
- 小常识 (3)
- 冷知识 (5)
- database (4)
- web (12)
- 架构 (12)
- Exception (0)
最新评论
-
jqw1992:
https://www.chromefor.com/libra ...
[福利] 开发者必备的 Chrome 插件——ChromeSnifferPlus -
litjerk:
初步算了一下,目前最最精简的Win98版是5M,他5个小时多敲 ...
让人目瞪口呆的三位世界级电脑大师 -
379855529:
。。似乎重点没说NIO啊,前面基础只是铺垫的很好的,可是我要的 ...
Java NIO与IO的详细区别(通俗篇) -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
一步步开发 Spring MVC 应用 -
匡建武:
Good
四个程序员的一天
为了说明JUnit4
和JUnit3
的区别,我们先看代码:
Largest.java:
这是一个测试类
//测试类
public class Largest {
public Largest() {
}
public static int largest(int[] list){//用于求该数组的最大值,为了测试方便,该方法为静态方法
int index,max=Integer.MAX_VALUE;
for(index=0;index<list.length-1;index++){
if(list[index]>max){
max=list[index];
}
}
return max;
}
}
首先看JUnit3
的
测试用例:TestLargest.java
:
import junit.framework.TestCase;
//这是用Junit3创建的,没有报错。
public
class TestLarget extends TestCase
{
protected void setUp()
throws Exception {
super.setUp();
}
public void testSimple()
{
assertEquals
(9,
Largest.largest(new int[]{9,8,7}));
}
protected void tearDown()
throws Exception {
super.tearDown();
}
}
然后我们再看用JUnit4
的测试用例:TestLargest.java:
//注意下面的包org.junit.After,org.junit.Before
import
org.junit.After;
import org.junit.Before;
//为了测试自己写的脚本,要引入包:
import org.junit.Test;
import org.junit.Assert;//assertEquals方法等都在Assert.中
//此种是自己New的一个Junit Test Case,
然后选择了自动添加setUp和tearDown方法。注意在两个方法的前面有两个标记:@Before和@After
public class TestLargest {
@Before
public void setUp() throws Exception {
}
@Test //此处必须加
public void testSimple()
{
//assetEquals(9,Largest.largest(new
int[]{9,8,7}));//为什么assetEquals()报错呢
Assert.assertEquals(
9,Largest.largest(new
int[]{9,8,7}));//避免上面的错误,要用此种形式
}
@After
public void tearDown() throws Exception {
}
}
下面的这个是右键
Largest.java,New->JUnit Test Case,自动生成的测试框架(JUnit4),LargestTest.java:
import static org.junit.Assert.*;
import org.junit.Test;
//此种方法为自动生成的框架。然后填写代码即可。右键
Larget.java,New->Junit Test Case
public class LargestTest {
@Test
public void testLargest() {
fail("Not yet implemented");
}
}
然后我们自己添加代码即可。 public class Product { public Product(String title, double
price) { public String getTitle() { public double getPrice() { public boolean equals(Object o) { return false; }
import java.util.*;
public class ShoppingCart public void removeItem(Product item)
throws ProductNotFoundException { public int getItemCount() { public void empty() { public ProductNotFoundException() { import
org.junit.After; private Product p; @After } import org.junit.After; private ShoppingCart cart; @After
@Test
Product book2 = new
Product("Pragmatic Project Automation", 29.95); Assert.
assertEquals(2, cart.getItemCount());
double expectedBalance =
book1.getPrice() + book2.getPrice(); cart.removeItem(book1); @Test Product book3 = new
Product("Pragmatic Unit Testingx", 29.95); Assert.
fail("Should raise a ProductNotFoundException");
}
catch(ProductNotFoundException expected) { import org.junit.runner.RunWith; //通过下面的形式运行套件,必
须构造一个空类 public class TestSuite {
}
import
junit.framework.Test; public static Test suite() { } import
junit.framework.*; } cart = new
ShoppingCart();
book1 = new
product("Pragmatic Unit Testing", 29.95);
cart.addItem(book1); /** cart.empty();
assertEquals
(0,
cart.getItemCount()); product book2 =
new product("Pragmatic Project Automation", 29.95); assertEquals
(2,
cart.getItemCount());
double
expectedBalance = book1.getPrice() + book2.getPrice();
cart.removeItem(book1);
assertEquals
(0,
cart.getItemCount()); try {
product
book3 = new product("Pragmatic Unit Testingx", 29.95); fail("Should
raise a ProductNotFoundException");
}
catch(productNotFoundException expected) { import junit.framework.*;
public class
TestClassComposite {//be a base class,extendding from TestCase is of no
necessary.
有上面的代码对比,我们可以总结JUnit4和JUnit3的区别
主
要有两点:
1. JUnit4
利用了
Java 5
的新特性
"
注释
"
,每个测试方法都不需要以
testXXX
的方式命名
,
运
行时不在用反射机制来查找并测试方法,取而带之是用
@Test
来标注每个测试方法,效率提升
2. JUnit4中
测试类不必
继承
TestCase
了,
另外要注意JUnit4和JUnit3引入的包完全不同。
PS:在
Eclipse
中要使用
Junit
的话,必须要添加
Junit
的
library
。
3.JUnit4和JUnit3在测试Suite时也有很大不同:
例如我们有两个测试类Product.java
,ShoppingCart.java
,还涉及到一个异常类ProductNotFoundException.java:
Product.java:
private String title;
private double price;
this.title = title;
this.price = price;
}
return title;
}
return price;
}
if (o instanceof Product) {
Product p = (Product)o;
return p.getTitle().equals(title);
}
}
ShoppingCart.java:
{
private ArrayList items;
public ShoppingCart()
{
items=new ArrayList();
}
public double getbalance()
{
double balance=0.00;
for(Iterator i=items.iterator();i.hasNext();)
{
Product item=(Product)i.next();
balance+=item.getPrice();
}
return balance;
}
public void addItem(Product item) {
items.add(item);
}
if (!items.remove(item)) {
throw new ProductNotFoundException();
}
}
return items.size();
}
items.clear();
}
}
ProductNotFoundException.java:
public class ProductNotFoundException
extends Exception {
super();
}
}
下面是用JUnit4
写的测试类:
ProductTest.java:
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.junit.Assert;
public class ProductTest extends TestCase//extends完全可以不写,只是为了把测试方法加入到suite中
{
public ProductTest() {
}
//这是为了AllTests类做的铺垫
public ProductTest(String method)
{
super(method);
}
@Before
public void setUp() throws Exception {
p=new Product("a book",32.45);
}
public void tearDown() throws
Exception {
}
@Test
public void testGetTitle()
{
Assert.
assertEquals("a
book",p.getTitle());
}
@Test
public void testSameRefrence()
{
//product q=new product("a sheet",12.56);
Product q=p;
Assert.
assertSame("not
equale object",p,q);
}
@Test
public void testEquals()
{
String q="Yest";
Assert.
assertEquals("should
not equal to a string object",false,p.equals(q));
}
@Test
public void testGetPrice()
{
Assert.
assertEquals(32.45,p.getPrice(),0.01);
}
ShoppingCartTest.java:
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class ShoppingCartTest {
private Product book1;
public ShoppingCartTest(){
}
@Before
public void setUp() throws Exception {
cart = new ShoppingCart();
book1 = new Product("Pragmatic Unit Testing", 29.95);
cart.addItem(book1);
}
public void tearDown() throws Exception {
}
@Test
public void testEmpty() {
cart.empty();
Assert.
assertEquals(0,
cart.getItemCount());
}
public void testAddItem() {
cart.addItem(book2);
Assert.
assertEquals(expectedBalance,
cart.getbalance(), 0.0);
}
//抛出异常
@Test
public void testRemoveItem() throws ProductNotFoundException {
Assert.
assertEquals(0,
cart.getItemCount());
}
public void testRemoveItemNotInCart() {//需要捕捉异常
try {
cart.removeItem(book3);
Assert.
assertTrue(true);
}
}
}
下面是测试套件的类:TestSuite.java(JUnit4)
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({ShoppingCartTest.class,ProductTest.class})
另外为了在Suite添加一个测试方法,我们可以采用下面的一个办法:AllTests.java:
import junit.framework.TestSuite;
public class AllTests {
TestSuite suite = new TestSuite("Test for default package");
suite.addTest(new
ProductTest("testGetTitle"));//注意此时ProductTest必须要继承TestCase
return suite;
}
作为对比,我们再看一下JUnit3
写的测试类:
productTest.java:
import junit.framework.TestCase;
public class productTest extends TestCase {
private product p;
public productTest() {
}
public void setUp()
{
p=new product("a book",32.45);
}
public void tearDown()
{
}
public void test
GetTitle()
{
assertEquals
("a
book",p.getTitle());
}
public void test
SameRefrence()
{
//product q=new product("a sheet",12.56);
product q=p;
assertSame
("not equale
object",p,q);
}
public void test
Equales()
{
String q="Yest";
assertEquals
("should
not equal to a string object",false,p.equals(q));
}
}
ShoppingCartTest
.java:
public class ShoppingCartTest extends TestCase {
private ShoppingCart cart;
private product book1;
public ShoppingCartTest(){
public ShoppingCartTest(String method){
super(method);
}
/**
* 建立测试 fixture.
* 每个test函数运行之前都执行.
*/
protected void setUp() {
}
* 销毁fixture.
* 每个测试函数执行之后都运行
*/
protected void tearDown() {
// release objects under test here, as necessary
}
public void test
Empty() {
}
public void test
AddItem() {
cart.addItem(book2);
assertEquals
(expectedBalance,
cart.getbalance(), 0.0);
}
public void test
RemoveItem() throws productNotFoundException {
}
public void test
RemoveItemNotInCart() {
cart.removeItem(book3);
assertTrue
(true);
}
}
public static Test suite(){
TestSuite suite=new TestSuite();
suite.addTest(new ShoppingCartTest("testRemoveItem"));
suite.addTest(new ShoppingCartTest("testRemoveItemNotInCart"));
return suite;
}
}
下面这个是测试Suite的测试类:TestClassComposite
.java(JUnit3):
public static Test suite() { //注意suite的大小写
TestSuite suite = new TestSuite();
suite.addTestSuite(productTest.class);
suite.addTest(ShoppingCartTest.suite());
return suite;
}
}
通过代码,我们可以清楚的看到JUnit4和
JUnit2在测试套件时的区别,JUnit4在测试套件时,必须构造一个空类,而且使用Annotation的形式,即
@RunWith(Suite.class)
@Suite.SuiteClasses({ShoppingCartTest.class,ProductTest.class}),而JUuni3则
是普通的直接用函数调用,添加Suite。
发表评论
-
Java NIO与IO的详细区别(通俗篇)
2014-01-02 10:51 69426内核空间、用户空间 ... -
Java EE 单元测试
2013-09-12 10:56 4781觉得测试 Java EE 应用程序太困难、不方便或者太复杂? ... -
JUnit 测试建议
2013-07-22 09:04 3482以下是对JUnit实践的一 ... -
老生常谈:面试算法有必要吗?
2013-04-01 09:55 32764声明:虽然发表在愚人节,但是文章内容很严肃。 前几天在知 ... -
一步步开发 Spring MVC 应用
2013-02-23 10:53 10352Spring MVC 框架 Spring 框 ... -
「译」Java集合框架系列教程四:Set接口
2013-01-18 13:20 2531原文:The Set Interface 译文:Java集 ... -
「译」Java集合框架系列教程三:Collection接口
2013-01-18 13:16 2371原文:The Collection Interface 译 ... -
「译」Java集合框架系列教程二:集合接口
2013-01-18 13:13 2012原文:http://docs.oracle.c ... -
Java集合框架系列教程一:集合框架简介
2013-01-18 12:47 3031原文:http://docs.oracle.com/jav ... -
Java泛型-类型擦除
2012-12-05 15:48 14618一、概述 Java泛型在使用过程有诸多的 ... -
千万不要把 bool 当成函数参数
2012-11-16 08:33 12494我们有很多 Coding Style 或 代码规范。 但这一条 ... -
网站建设中关于eclipse启动参数的优化
2012-08-23 09:23 2503在网站建设中,经常用 ... -
Eclipse程序员要掌握的常用快捷键
2012-08-22 09:33 10062判断一个人的编程水平,就看他用键盘多,还是鼠标多。用键 ... -
java中equals和==的区别
2012-08-15 16:31 2032值类型是存储在内存中的堆栈(简称栈),而引用类型的变量在 ... -
名词王国里的死刑(翻译) - A Story of Hello World
2012-07-23 10:43 11812翻译自Steve Yegge的大 ... -
好代码是廉价的代码
2012-07-19 08:03 3296长久以来我一直主张:好代码是廉价的代码。 当我跟做开发 ... -
只要一个返回语句
2012-05-18 13:18 1821别再这样写了: publ ... -
java编程的78条黄金法则
2012-05-16 12:57 2365创建和销毁对象 1、考虑用静态工厂方法(返回类的实例的 ... -
for 循环为何可恨?
2012-05-15 12:44 1621Java的闭包(Closure)特征最近成为了一个热门话 ... -
Java 8 新功能
2012-05-02 08:48 1902我们已经急不可待想知道Java 8可用的新功能,其中大部 ...
相关推荐
这个“junit4 jar完整包”包含了所有你需要进行单元测试的类和接口,使得测试过程变得简单且易于维护。下面我们将深入探讨JUnit4的核心概念、功能以及如何使用它。 首先,JUnit4是JUnit系列的一个重大升级,引入了...
在 JUnit3 中,使用 `setUp` 和 `tearDown` 方法来进行测试前后的初始化和清理工作。而在 JUnit4 中,使用 `@Before` 和 `@After` 注解替代了这些方法。 #### 四、JUnit4 实践案例 下面是一个使用 JUnit4 编写的...
这个“junit4 jar包”包含了运行JUnit4测试所必需的库文件,主要包括两个核心组件:`junit-4.11.jar`和`hamcrest-core-1.3.jar`。 `junit-4.11.jar`是JUnit的主要库,包含了JUnit4.11版本的所有功能。这个版本引入...
JUnit4测试框架是Java开发中广泛使用的单元测试工具,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个“junit4测试jar包”包含了一切你需要在项目中集成JUnit4进行测试的库文件。只需将其复制到你的...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的工具来编写、组织和执行单元测试。JUnit4引入了许多改进和新特性,极大地提升了测试的灵活性和效率。下面将详细介绍JUnit4的关键概念、...
与JUnit3相比,JUnit4的灵活性和可扩展性得到了显著提升,使得测试驱动开发(TDD)在Java领域变得更加普及。 ## 二、JUnit4的核心组件 ### 1. 测试注解 - `@Test`: 表示一个方法是测试方法,可以包含断言。 - `@...
5. **分类(Categories)**:在JUnit 4中引入,用于组织和筛选测试,但JUnit 3没有这个功能。 **JUnit 4 API** JUnit 4是一个重大的更新,引入了许多新特性和改进,使得测试更加灵活和强大: 1. **测试注解...
总结来说,JUnit4 是对 JUnit3 的一个重要升级,它利用 Java 5 的注解特性极大地简化了测试用例的编写,提高了测试代码的可读性和可维护性。通过使用注解,开发者能够更自由地组织测试逻辑,同时也能够方便地扩展...
同时,JUnit4 也提供了更多的元数据来描述测试方法的行为,从而使得测试用例更加灵活和可靠。 五、JUnit4 的应用场景 JUnit4 可以应用于各种 Java 项目的测试中,包括单元测试、集成测试、功能测试等。使用 JUnit4...
3. **JUnit4的扩展**: - **Test Rules**:可以通过实现`org.junit.rules.TestRule`接口来创建自定义测试规则,增强测试的功能。 - **Test Execution Listeners**:监听测试执行过程,通过实现`org.junit.runner....
要使用JUnit4进行单元测试,需要创建一个测试类和测试方法。测试类通常放在test包中,类名用XXXTest结尾。测试方法用testMethod命名。下面是一个简单的JUnit4 HelloWorld示例: 首先,创建一个测试类:...
为了更好地学习和实践这些概念,文档"单元测试JUnit4和DbUnit.doc"可能包含了详细的步骤和示例代码,而"dbunitAndJunit4"和"junit4"这两个文件夹可能包含了相关的练习项目或者源码,通过阅读和运行这些代码,可以...
赠送jar包:powermock-module-junit4-2.0.9.jar; 赠送原API文档:powermock-module-junit4-2.0.9-javadoc.jar; 赠送源代码:powermock-module-junit4-2.0.9-sources.jar; 赠送Maven依赖信息文件:powermock-...
JUnit4作为Java平台上的主流单元测试工具,为开发者提供了丰富的注解和API,使得测试用例的编写更为简洁明了。 JUnit4引入了许多新特性,如注解(Annotations)和参数化测试。注解使得测试类和方法的声明更加直观,...
* 向后兼容,可以运行 JUnit3 的测试 * 提供了多种 assert 方法,方便测试结果的检查 * 可以与各种流行工具(如 Ant 和 Maven)集成 * 可以与流行 IDE(如 Eclipse、NetBeans、IntelliJ 和 JBuilder)集成 JUnit ...
首先,JUnit4是对JUnit3的一个重大改进,它引入了注解(Annotations)的概念,这使得编写测试用例更加简洁。例如,`@Test`注解用于标记测试方法,而`@Before`和`@After`则分别用于在每个测试之前和之后执行的设置和...
JUnit4相比其前身JUnit3,引入了许多改进和新特性,使得测试更加灵活和强大。 1. **注解驱动测试**:JUnit4放弃了传统的继承Test类的方式,而是采用注解(@Test)来标记测试方法,使得测试类结构更加清晰,易于理解...
【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...