EasyMock教程

Mocking是什么?

Mocking是一种在隔离测试一个类的功能。例如,无需数据库连接或属性文件中读取或文件服务器上读取需要测试的功能。 mock对象做实服务的嘲讽。一个mock对象返回对应于传递给它一些虚拟输入无效数据。

EasyMock

EasyMock便于无缝地创建模拟对象。它使用Java反射,以创造为给定接口的模拟对象。模拟对象是什么,只不过是代理的实际实现。考虑如:股票服务的情况下,它返回一个股票价格的详细信息。在开发过程中,实际的库存服务不能被用于获得实时数据。因此,我们需要一个虚拟的股票实施服务。简易模拟可以很容易理解顾名思义这样。

EasyMock的好处

  • 不用手写 -  没有必要通过自己编写的模拟对象。

  • 重构安全 - 重构接口方法的名称或重新排序的参数不会破坏测试代码在运行时创建。

  • 返回值支持 - 支持返回值。

  • 异常支持 - 支持例外/异常。

  • 命令检查支持 - 支持检查命令方法调用。

  • 注释支持 - 支持使用注解创建。

考虑下面的代码片段。

package com.vcclass.mock;

import java.util.ArrayList;
import java.util.List;

import org.easymock.EasyMock;

public class PortfolioTester {
   public static void main(String[] args){

      //Create a portfolio object which is to be tested		
      Portfolio portfolio = new Portfolio();

      //Creates a list of stocks to be added to the portfolio
      List<Stock> stocks = new ArrayList<Stock>();
      Stock googleStock = new Stock("1","Google", 10);
      Stock microsoftStock = new Stock("2","Microsoft",100);

      stocks.add(googleStock);
      stocks.add(microsoftStock);		

      //Create the mock object of stock service
      StockService stockServiceMock = EasyMock.createMock(StockService.class);

      //mock the behavior of stock service to return the value of various stocks
      EasyMock.expect(stockServiceMock.getPrice(googleStock)).andReturn(50.00);
      EasyMock.expect(stockServiceMock.getPrice(microsoftStock)).andReturn(1000.00);

      EasyMock.replay(stockServiceMock);
      //add stocks to the portfolio
      portfolio.setStocks(stocks);
      //set the stockService to the portfolio
      portfolio.setStockService(stockServiceMock);

      double marketValue = portfolio.getMarketValue();

      //verify the market value to be 10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500
      System.out.println("Market value of the portfolio: "+ marketValue);
   }
}

让我们来了解上述程序的重要概念。完整的代码在第一个应用。

  • Portfolio  - 进行股票名单,并获得用股票价格和股票数量计算的市场价值的对象。

  • Stock  - 携带一只股票的详细信息,如它的id,名称,数量等的对象

  • StockService - 股票的服务接口,其功能是返回一个股票的当前价格。

  • EasyMock.createMock(...)  - EasyMock股票创建了服务的模拟

  • EasyMock.expect(...).andReturn(...) - 模拟实现StockService接口用getPrice方法。对于googleStock,回到50.00的价格。

  • EasyMock.replay(...) - EasyMock准备模拟对象,以便它可以被用于测试目的。

  • portfolio.setStocks(...) - 现在的投资组合包含了两只股票列表。

  • portfolio.setStockService(...) - 分配的StockService模拟对象来组合。

  • portfolio.getMarketValue() - 基于使用的模拟股票服务公司的股票投资组合回报的市场价值。


猿狮妹
2022-07-31
EasyMock EasyMock教程 编程课程
热门教程
1 EasyMock教程 EasyMock是一种嘲弄的框架,基于JAVA的库,缓解了JAVA应用程序的单元测试。 EasyMock用于模拟接口,使一个虚设的功能可以被添加到一个模拟接口,模拟可以在单元测试中使用。
2 EasyMock anyTimes示例 以下是所采取的步骤。 创建一个接口CalculatorService,其目的是提供各种计算相关的功能。 CalculatorService.java public interface CalculatorService { public double add ( double input1 , double input2 ); public do
3 EasyMock环境安装 EasyMock是Java框架,所以第一个要求是要在机器安装JDK。 系统要求 JDK 1.5 或以上. 内存 没有最低要求 硬盘空间 没有最低要求 操作系统 没有最低要求 第1步 - 验证Java安装在机器 现在,打
4 EasyMock异常处理 EasyMock提供了一个功能,用以模拟抛出异常,所以异常处理可以进行测试。 //add the behavior to throw exception EasyMock . expect ( calcService . add ( 10.0 , 20.0 )). andThrow ( new RuntimeException ( Add operation
5 EasyMock JUnit集成 在本章中,我们将集成JUnit和EasyMock在一起。对于JUnit,请参阅 JUnit教程 。我们使用计算器服务的例子。目的是创建一个数学应用,它使用CalculatorService做加,减,除运算操作。我们将使
6 EasyMock添加行为 EasyMock使用expect()方法或expectLassCall()方法添加一个功能,一个模拟对象。请看下面的代码片段。 //add the behavior of calc service to add two numbers EasyMock . expect ( calcService . add ( 10.0 , 20.0
7 EasyMock不使用EasyMock.Replay()示例 以下是所采取的步骤。 创建一个接口CalculatorService,其目的是提供各种计算相关的功能。 CalculatorService.java public interface CalculatorService { public double add ( double input1 , double input2 ); public do
8 EasyMock EasyMock.Replay()示例 以下是所采取的步骤。 创建一个接口CalculatorService,其目的是提供各种计算相关的功能。 CalculatorService.java public interface CalculatorService { public double add ( double input1 , double input2 ); public do
9 EasyMock验证行为 EasyMock提供了一个检查被使用或不使用verify()方法,请看下面的代码片段。 //activate the mock EasyMock . replay ( calcService ); //test the add functionality Assert . assertEquals ( mathApplication . add ( 10.0 ,
10 EasyMock不使用EasyMock.Verify()示例 以下是所采取的步骤。创建一个接口CalculatorService,其目的是提供各种计算相关的功能。
  • Copyright © 2021 猿狮院, All rights reserved.