junit测试

传智播客——MVC加强和Junit测试框架 (2010-01-13 21:32:25)

1.10

思路:个人认为,模式是死的,人是活的。编程就是要把死的模式玩活。

     a.原MVC的缺陷,不能满足如银行转账等需要统一事务处理的业务,因此引出在modle层中分出业务逻辑层。

     b.Junit测试框架的使用。

思考:在开发中为什么要引入业务层?

MVC:model  view  controller

在Model的工厂前添加业务层。主要用来封装将要用到的业务看成一个整体。同时提交或同事失败。

 

存款流程:  存款表 和  账户表      先插入存款然出在存入账户

自动提交失效:conn.setAutoCommit(false)  

提交事务: conn.commit();

回滚事务: conn.rollback();

 

 

添加的业务逻辑的代码:

public void saveInAccount(InAccount inAccount) {

       

   

 

        DBManager dbManager=null;

        Connection conn=null;

        InAccountDao inAccountDao=null;

        AccountDao accountDao=null;

       

        //获取DBManager对象

        dbManager=DBManager.getDbManager();

       

        //获取连接

        conn=dbManager.getConnection();

       

        //获取InAccountDao接口的对象

        inAccountDao=DaoFactory.getInAccountDao();

        accountDao=DaoFactory.getAccountDao();

        try{

///////////////////////////////////////////////////////////////////////////////////////

       //设置连接为非自动提交

        dbManager.beginTransaction(conn);

       

       

       

       

         //1 存款(insert) 插入到inaccount表

        inAccountDao.saveInAccount(conn,inAccount); //还没有提交

       

        //2 查询账户余额(select) //account表

        Account account=accountDao.findBalancebyAccountid(conn,inAccount.getAccountid());

       

        //输出余额

        System.out.println("**** "+account.getBalance());

       

        //3 更新账户余额(update)

        //计算当前账号的金额

        Double balance=inAccount.getInbalance()+account.getBalance();

        //修改余额

        account.setBalance(balance);

       

        accountDao.updateAccount(conn,account);

       

        //真正提交

        dbManager.commitTransaction(conn);

///////////////////////////////////////////////////////////////////////////////////////

        }catch(Exception e){

        dbManager.rollbackTransaction(conn);

        e.printStackTrace();

        }finally{

        dbManager.closeResource(conn, null,null);

        }

    }

MVC异常处理:

 

程序中的异常一般都在  控制层进行统一处理

 

异常类型:   

Throwable : 

Exception  :a.  RuntimeException    运行时异常,不用捕获和声明

           b.  检查异常   需要捕获和声明   //检查异常可以转换为非检查异常

 

自定义异常

 

思路:即,每个分层都对应一个异常处理类,在该层进行异常捕获,并抛出到上一层,直到控制层为止,并在控制层进行统一的异常处理,然后转到异常处理页面。显示汉字异常信息。

 

目录结果如下:

 

 

 

 

junit测试框架

    什么是Junit?

JUnit是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器

安装:导入junitJar到项目中。

   最新版是4.4   下载网址:从Junit(http://www.junit.org/index.htm或http://download.sourceforge.net/junit/)下载最新的软件包.
    使用:

老式的:

        实现extends TestCase类。

  然后在要测试的方法中调用方法进行测试:this.assertEquals(expected, actual);

       实例:

               Compute c=null;

              

              

               protected void setUp() throws Exception {

                  System.out.println("setUp");

                  c=new Compute();

               }

              

              

               protected void tearDown() throws Exception {

                System.out.println("tearDown");

               }

 

               //测试add方法的正确性

               public void testAdd(){

                System.out.println("testAdd");

                //this.assertEquals(0, c.add(0, 0));

                this.assertEquals(3, c.add(1, 2));

                this.assertEquals(9, c.add(4, 5));

               }

新式的:

JUnit 4 使用 Java 5 中的注解(annotation),以下是JUnit 4 常用的几个 annotation 介绍
@Before:初始化方法
@After:释放资源
@Test:测试方法,在这里可以测试期望异常和超时时间
@Ignore:忽略的测试方法
@BeforeClass:针对所有测试,只执行一次,且必须为static void
@AfterClass:针对所有测试,只执行一次,且必须为static void
一个JUnit 4 的单元测试用例执行顺序为:
@BeforeClass –> @Before –> @Test –> @After –> @AfterClass
每一个测试方法的调用顺序为:
@Before –> @Test –> @After

 

增强:可以单独运行某个方法

实例:

static Compute c=null;

   

    // 1 BeforeClass 该方法最先执行,只执行一次

    @BeforeClass

    public static  void beforeClass(){

        c=new Compute();

       System.out.println("beforeClass");

    }

 

    // 5  AfterClass 该方法最后执行,只执行一次

    @AfterClass

    public static  void afterClass(){

       System.out.println("afterClass");

    }

   

    // 2 Before注解表示在运行测试方法前执行

    @Before

    public void beforeMethod(){

       System.out.println("beforeMethod");

    }

   

    //4 after注解表示在运行测试方后执行

    @After

    public void afterMethod(){

       System.out.println("afterMethod");

    }

   

    //3 Test注解要运行测试的方法

    @Test

    public void add(){

       System.out.println("Add");

       Assert.assertEquals(0, c.add(0, 0));

    }

      

    @Test

    public void mul(){

       System.out.println("Mul");

        Assert.assertEquals(0, c.mul(0, 0));

       Assert.assertEquals(3, c.mul(1, 3));

       Assert.assertEquals(20, c.mul(4, 5));

}

### JUnit 测试的相关信息与使用方法 #### 1. JUnit 的基本概念 JUnit 是一个开源的 Java 单元测试框架,最初由 Erich Gamma 和 Kent Beck 编写。它是一种白盒测试工具,允许开发者编写自动化测试用例来验证代码的功能是否正确[^1]。JUnit 提供了一套规则和约定,开发者可以通过继承特定类或实现接口来编写符合框架要求的测试代码。 #### 2. JUnit 的核心特性 JUnit 支持以下关键功能: - **断言(Assertions)**:用于验证代码的实际输出是否与预期结果一致。 - **测试运行器(Test Runners)**:负责执行测试用例并报告测试结果。 - **注解(Annotations)**:如 `@Test`、`@Before`、`@After` 等,用于标记测试方法和生命周期方法[^1]。 #### 3. JUnit 的配置与使用 在使用 JUnit 进行单元测试之前,需要完成以下步骤: - 下载 JUnit 包并将其添加到项目的类路径中[^1]。 - 编写测试类,通常以 `Test` 结尾,并确保每个测试方法都使用 `@Test` 注解标记。 - 使用断言方法(如 `assertEquals`、`assertTrue` 等)验证代码行为。 以下是一个简单的 JUnit 测试示例: ```java import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { @Test public void testAddition() { Calculator calculator = new Calculator(); int result = calculator.add(2, 3); assertEquals(5, result); // 验证加法结果是否为 5 } } ``` #### 4. JUnit 的最佳实践 为了提高单元测试的质量和效率,可以遵循以下最佳实践: - **保持测试独立性**:每个测试用例应独立运行,避免依赖其他测试的结果。 - **使用 Mock 对象**:通过模拟外部依赖(如数据库或服务),确保测试专注于代码逻辑本身[^2]。 - **覆盖边界条件**:测试应包括正常情况和异常情况,特别是输入值的边界条件。 - **定期运行测试**:将测试集成到持续集成(CI)流程中,确保每次代码更改后都能自动运行测试。 #### 5. 结合 Mockito 进行单元测试 Mockito 是一个流行的 Java 框架,用于创建 Mock 对象。它可以与 JUnit 结合使用,简化对外部依赖的模拟。例如,以下代码展示了如何使用 Mockito 验证方法调用次数: ```java import static org.mockito.Mockito.*; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class UserServiceTest { private UserService mockUserService; @Before public void setUp() { mockUserService = mock(UserService.class); } @Test public void testAddMethodInvocation() { List<String> features = new ArrayList<>(); mockUserService.add("实验", "123", features); verify(mockUserService, times(1)).add("实验", "123", features); // 验证 add 方法被调用一次 verify(mockUserService, times(1)).add(anyString(), anyString(), anyList()); // 使用通配符验证 } } ``` #### 6. 自动化测试的实现 JUnit 可以与其他工具结合使用,实现测试的自动化。例如,在团队开发中,可以采用以下模式: - **版本控制**:使用 CVS 或 Git 管理代码版本。 - **项目管理**:通过 Ant 或 Maven 配置构建脚本,自动运行测试用例[^1]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值