`
esperanza
  • 浏览: 183383 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

junit3与junit4的区别

阅读更多

Junit4最大的亮点就是引入了注解(annotation),通过解析注解就可以为测试提供相应的信息,抛弃junit3使用命名约束以及反射机制的方法。

/**

 * 被测试类

 */

package com.stock.finance.service;

 

import java.util.List;

import java.util.zip.DataFormatException;

import com.stock.finance.db.dao.TableCompanyDAO;

import com.stock.finance.db.model.TableCompany;

 

/**

*

 */

public class CompanyService {

    private TableCompanyDAO dao = new TableCompanyDAO();

   

    public CompanyService(){

    }

    /**

     * @param code

     * @param name

     * @param masterBusiness

     */

    public void insert(String code,String name,String masterBusiness){

        TableCompany company = new TableCompany(code, name);

        company.setMasterBusiness(masterBusiness);

        insert(company);

    }

    /**

     * @param company

     */

    public void insert(TableCompany company){

        dao.save(company);

    }

    /**

     * @return

     */

    public int companyNum(){

        List<?> list = dao.findAll();

        return list.size();

    }

   

    public void justForDisplay() throws DataFormatException{

        throw new DataFormatException();

    }

}

/**

 * junit3测试类

 */

package test.com.stock.finance.service;

import java.util.zip.DataFormatException;

import com.stock.finance.service.CompanyService;

import junit.framework.TestCase;

/**

 */

public class Tester3 extends TestCase {

         private CompanyService service = new CompanyService();

         protected void setUp() throws Exception {

                   super.setUp();

         }

         protected void tearDown() throws Exception {

                   super.tearDown();

         }

         public final void testInsertStringStringString() {

                   fail("Not yet implemented"); // TODO

         }

         public final void testInsertTableCompany() {

                   fail("Not yet implemented"); // TODO

         }

         public final void testCompanyNum() {

                   fail("Not yet implemented"); // TODO

         }

         public final void testJustForDisplay() {

                   try {

                            service.justForDisplay();

                   } catch (DataFormatException e) {

                            assertTrue("捕获异常正确", true);

                   }

         }

}

/**

 * junit4测试类

 */

package test.com.stock.finance.service;

//静态引用

import static org.junit.Assert.*;

 

import java.util.zip.DataFormatException;

 

import org.junit.After;

import org.junit.AfterClass;

import org.junit.Before;

import org.junit.BeforeClass;

import org.junit.Ignore;

import org.junit.Test;

 

import com.stock.finance.service.CompanyService;

 

/**

*

 */

public class Tester4 {

         private CompanyService service = new CompanyService();

         /**

          * @throws java.lang.Exception

          */

         @BeforeClass

         public static void setUpBeforeClass() throws Exception {

         }

         /**

          * @throws java.lang.Exception

          */

         @AfterClass

         public static void tearDownAfterClass() throws Exception {

         }

         /**

          * @throws java.lang.Exception

          */

         @Before

         public void setUp() throws Exception {

         }

         /**

          * @throws java.lang.Exception

          */

         @After

         public void tearDown() throws Exception {

         }

         @Test

         @Ignore

         public final void testInsertStringStringString() {

//               fail("Not yet implemented"); // TODO

         }

         @Test(timeout = 1000)

         public final void testInsertTableCompany() {

//               fail("Not yet implemented"); // TODO

         }

         @Test

         public final void testCompanyNum() {

                   fail("Not yet implemented"); // TODO

         }

         @Test(expected = DataFormatException.class)

         public final void testJustForDisplay() throws DataFormatException {

                   service.justForDisplay();

         }

}

junit3junit4的使用区别如下
1.JUnit3中需要继承TestCase类,但在JUnit4中已经不需要继承TestCase
2.JUnit3中需要覆盖TestCase中的setUptearDown方法,其中setUp方法会在测试执行前被调用以完成初始化工作,而tearDown方法则在结束测试结果时被调用,用于释放测试使用中的资源,而在JUnit4中,只需要在方法前加上@Before
@After
3.JUnit3中对某个方法进行测试时,测试方法的命令是固定的,例如对addBook这个方法进行测试,需要编写名字为tetAddBook的测试方法,而在JUnit4中没有方法命令的约束,在方法的前面加上@Test,这就代表这个方法是测试用例中的测试方法

4.新的断言assertThat
5. @BeforeClass @AfterClass 。在JUnit3,如果所有的test case仅调用一次setUp()tearDown()需要使用TestSetup
6.测试异常处理@Test(expected = DataFormatException.class)
7.设置超时
@Test(timeout = 1000)
8.忽略测试
@Ignore
9.集成测试

 

 

集成测试

    利用TestSuite可以将一个TestCase子类中所有test***()方法包含进来一起运行,还可将TestSuite子类也包含进来,从而行成了一种等级关系。可以把TestSuite视为一个容器,可以盛放TestCase中的test***()方法,它自己也可以嵌套。这种体系架构,非常类似于现实中程序一步步开发一步步集成的现况。

    junit中,TestTestCaseTestSuite三者组成了composiste pattern。通过组装自己的TestSuite,可以完成对添加到这个TestSuite中的所有的TestCase的调用。而且这些定义的TestSuite还可以组装成更大的TestSuite,这样同时也方便了对于不断增加的TestCase的管理和维护。

    它的另一个好处就是,可以从这个TestCase树的任意一个节点(TestSuiteTestCase)开始调用,来完成这个节点以下的所有TestCase的调用。提高了unit test的灵活性。

例如:

### JUnit-3.8.1结构:

import junit.framework.Test;

import junit.framework.TestSuite;

public class TestAll{

    //定义一个suite,对于junit的作用可以视为类似于java应用程序的main

    public static Test suite(){

        TestSuite suite = new TestSuite("Running all tests.");

        suite.addTestSuite( TestCase1.class);

        suite.addTestSuite( TestCase2.class);

        return suite;

    }

}

### JUnit-4.X结构:

import org.junit.runner.RunWith;

import org.junit.runners.Suite;

@RunWith(Suite.class)

@Suite.SuiteClasses({ TestCase1.class, TestCase2.class })

public class AllCalculatorTests {

 

}

//代码示例:在junit3中如何通过执行多个测试方法,却只执行一次setUptearDown方法

import junit.framework.*;
import junit.extensions.TestSetup;
public class AllTestsOneTimeSetup {
    
public static Test suite() {
        TestSuite suite = 
new TestSuite();
        suite.addTest(SomeTest.suite());
        suite.addTest(AnotherTest.suite());
        TestSetup wrapper = 
new TestSetup(suite) {
            
protected void setUp() {
                oneTimeSetUp();
            }
            
protected void tearDown() {
                oneTimeTearDown();
            }
        };
        
return wrapper;
    }
    
public static void oneTimeSetUp() {
        
// one-time initialization code
    }
    
public static void oneTimeTearDown() {
        
// one-time cleanup code
    }
}

分享到:
评论

相关推荐

    junit4学习文档

    #### 三、JUnit4 与 JUnit3 的差异 在 JUnit3 中,编写测试用例时有许多限制,比如测试类必须继承 `junit.framework.TestCase` 类,且测试方法必须以 `test` 开头。这些限制在 JUnit4 中已经被取消,取而代之的是...

    JUnit4JUnit4JUnit4(文档)

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的工具来编写、组织和执行单元测试。JUnit4引入了许多改进和新特性,极大地提升了测试的灵活性和效率。下面将详细介绍JUnit4的关键概念、...

    junit4 jar包

    此外,JUnit4可以与其他库(如Mockito、EasyMock等)结合使用,进行模拟对象和依赖注入,以实现更复杂的测试场景。 总结一下,"junit4 jar包"是Java开发中不可或缺的一部分,它提供了一套完善的单元测试工具和API,...

    junit4测试jar包

    同时,JUnit4与大多数IDE和构建工具(如Maven、Gradle)良好集成。 在实际开发中,使用JUnit4进行单元测试能够帮助我们确保代码的质量,发现并修复bug,提高软件的稳定性。正确地利用JUnit4提供的功能,可以有效地...

    junit4 jar完整包

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个“junit4 jar完整包”包含了所有你需要进行单元测试的类和接口,使得测试过程变得简单且易于...

    junit3个安装包

    **JUnit 3的安装与使用** 1. **添加依赖**:在Java项目中,首先需要将JUnit库添加到项目的类路径中。如果是Maven项目,可以在`pom.xml`文件中添加JUnit 3的依赖: ```xml &lt;groupId&gt;junit &lt;artifactId&gt;junit ...

    junit4教程(《Junit4初探》)

    与JUnit3相比,JUnit4的灵活性和可扩展性得到了显著提升,使得测试驱动开发(TDD)在Java领域变得更加普及。 ## 二、JUnit4的核心组件 ### 1. 测试注解 - `@Test`: 表示一个方法是测试方法,可以包含断言。 - `@...

    JUnit in Action 3nd Edition

    JUnit可以与其他开发工具集成,如Eclipse、IntelliJ IDEA、Maven等。 JUnit 5的新特性 JUnit 5引入了许多新的特性,如Parameterized Tests、Dynamic Tests、Extensions等。Parameterized Tests允许开发者使用参数化...

    Junit4简单实用

    与 JUnit 3 中的约定(测试方法需以 "test" 开头)相比,这种方式更加灵活,且更符合面向对象编程的原则。 在 JUnit 4 中,除了基本的断言方法,如 `assertEquals`,还有其他的一些断言方法,例如 `assertTrue`,`...

    spring2 junit3

    博主可能还会讨论在Spring 2.x中遇到的挑战,比如JUnit3与Spring的集成,以及如何在没有注解支持的情况下管理测试环境。此外,可能还会提及升级到JUnit4或其他现代测试库的可能性和步骤,因为这在当时是一个常见的...

    junit3.8 和junit4 api

    5. **分类(Categories)**:在JUnit 4中引入,用于组织和筛选测试,但JUnit 3没有这个功能。 **JUnit 4 API** JUnit 4是一个重大的更新,引入了许多新特性和改进,使得测试更加灵活和强大: 1. **测试注解...

    junit5.rar包含JUnit Platform + JUnit Jupiter + JUnit Vintage依赖jar包

    JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-...JUnit Vintage提供了一个在平台上运行JUnit 3和JUnit 4的TestEngine 。

    Junit4完整源码

    - **集成到构建工具**:JUnit4与Maven、Gradle等构建工具无缝集成,使得测试成为项目构建的一部分。 6. **学习路径**: - 开始时,可以浏览`javadoc`了解基本API。 - 掌握基本的测试用例编写,学习如何使用注解...

    Junit4教程非常详尽

    JUnit4 教程详尽 JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简化测试用例的编写。下面是对 JUnit4 的详细介绍: 一、Annotation 简介 Annotation 是 Java5 中引入的...

    JUnit4基础文档

    JUnit4基础文档 单元测试是软件测试的一种,旨在检验软件的正确性和可靠性。JUnit是一个流行的单元测试框架,广泛应用于Java开发中。本文档介绍了JUnit4的基础知识,包括单元测试的概念、JUnit4的HelloWorld示例、...

    JUnit3.X和4.X学习记录及用例

    总之,这个学习资源将带你深入理解JUnit的基本概念和高级特性,通过阅读`JUnit学习笔记.txt`并动手实践其中的示例,你将能熟练掌握如何利用JUnit3和JUnit4进行有效的单元测试,从而提升代码质量和项目稳定性。

    Junit4使用方法

    * 向后兼容,可以运行 JUnit3 的测试 * 提供了多种 assert 方法,方便测试结果的检查 * 可以与各种流行工具(如 Ant 和 Maven)集成 * 可以与流行 IDE(如 Eclipse、NetBeans、IntelliJ 和 JBuilder)集成 JUnit ...

    Junit4电子教程 api

    10. **Mockito集成**:JUnit4与Mockito库结合,可以很方便地进行依赖注入的模拟,帮助隔离测试。 通过这个“Junit4电子教程 API”,学习者将能够深入理解JUnit4提供的各种功能,并学会如何在实际项目中有效地利用...

Global site tag (gtag.js) - Google Analytics