深圳教育网站建设,一个空间怎么做两个网站,河北邢台最新消息今天,青岛市规划建设局网站在本文中#xff0c;我将向您展示EasyMock是什么#xff0c;以及如何使用它来测试Java应用程序。 为此#xff0c;我将创建一个简单的Portfolio应用程序#xff0c;并使用JUnit#xff06;EasyMock库对其进行测试。 在开始之前#xff0c;让我们首先了解使用EasyMock的需… 在本文中我将向您展示EasyMock是什么以及如何使用它来测试Java应用程序。 为此我将创建一个简单的Portfolio应用程序并使用JUnitEasyMock库对其进行测试。 在开始之前让我们首先了解使用EasyMock的需求。 可以说您正在构建一个Android移动应用程序来维护用户的股票投资组合。 您的应用程序将使用股票市场服务从真实服务器例如NASDAQ检索股票价格。 在测试代码时您不想在真正的股票市场服务器上获取股票价格。 相反您需要一些虚拟价格值。 因此您需要模拟不返回真实服务器值即可返回虚拟值的股市服务。 EasyMock确实在做同样的事情–帮助您模拟界面。 您可以预定义模拟对象的行为然后在代码中使用该模拟对象进行测试。 因为您只关心测试 你的逻辑 和 而不是外部服务或对象。 因此模拟外部服务很有意义。 为了清楚起见请看下面的代码摘录我们将在一段时间内看到完整的代码 StockMarket marketMock EasyMock.createMock(StockMarket.class);
EasyMock.expect(marketMock.getPrice(EBAY)).andReturn(42.00);
EasyMock.replay(marketMock); 在第一行中我们要求EasyMock为我们的StockMarket接口创建一个模拟对象。 然后在第二行中定义该模拟对象的行为–即当使用参数“ EBAY”调用getPrice方法时该模拟对象应返回42.00 。 然后我们调用replay方法以使模拟对象可以使用。 因此这几乎为EasyMock及其用法设置了上下文。 让我们深入研究Portfolio应用程序。 您可以从Github下载完整的源代码。 投资组合申请 我们的投资组合应用程序非常简单。 它有一个Stock类代表股票名称和数量而Portfolio类则代表股票清单。 此投资组合类具有一种计算投资组合总价值的方法。 我们的类使用StockMarket 接口对象检索股票价格。 在测试我们的代码时我们将使用EasyMock模拟此StockMarket 。 股票.java 一个非常简单的普通旧Java对象POJO用来表示单个股票。 package com.veerasundar.easymock;public class Stock {private String name;private int quantity;public Stock(String name, int quantity) {this.name name;this.quantity quantity;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity quantity;}} StockMarket.java 表示股票市场服务的接口。 它具有一种返回给定股票名称的股票价格的方法。 package com.veerasundar.easymock;public interface StockMarket {public Double getPrice(String stockName);} Portfolio.java 该对象包含一个Stock对象列表以及一种计算投资组合总价值的方法。 它使用StockMarket对象检索股票价格。 由于对依赖项进行硬编码不是一种好习惯因此我们尚未初始化stockMarket对象。 稍后我们将使用测试代码将其注入。 package com.veerasundar.easymock;import java.util.ArrayList;import java.util.List;public class Portfolio {private String name;private StockMarket stockMarket;private ListStock stocks new ArrayListStock();** this method gets the market value for each stock, sums it up and returns* the total value of the portfolio.*public Double getTotalValue() {Double value 0.0;for (Stock stock : this.stocks) {value (stockMarket.getPrice(stock.getName()) * stock.getQuantity());}return value;}public String getName() {return name;}public void setName(String name) {this.name name;}public ListStock getStocks() {return stocks;}public void setStocks(ListStock stocks) {this.stocks stocks;}public void addStock(Stock stock) {stocks.add(stock);}public StockMarket getStockMarket() {return stockMarket;}public void setStockMarket(StockMarket stockMarket) {this.stockMarket stockMarket;}} 因此现在我们已经对整个应用程序进行了编码。 在此我们将测试Portfolio.getTotalValue方法因为这是我们的业务逻辑所在。 使用JUnit和EasyMock测试Portfolio应用程序如果您以前从未使用过JUnit那么现在是开始使用JUnit的好时机。 PortfolioTest.java package com.veerasundar.easymock.tests;import junit.framework.TestCase;import org.easymock.EasyMock;import org.junit.Before;import org.junit.Test;import com.veerasundar.easymock.Portfolio;import com.veerasundar.easymock.Stock;import com.veerasundar.easymock.StockMarket;public class PortfolioTest extends TestCase {private Portfolio portfolio;private StockMarket marketMock;Beforepublic void setUp() {portfolio new Portfolio();portfolio.setName(Veeras portfolio.);marketMock EasyMock.createMock(StockMarket.class);portfolio.setStockMarket(marketMock);}Testpublic void testGetTotalValue() {* Setup our mock object with the expected values *EasyMock.expect(marketMock.getPrice(EBAY)).andReturn(42.00);EasyMock.replay(marketMock);* Now start testing our portfolio *Stock ebayStock new Stock(EBAY, 2);portfolio.addStock(ebayStock);assertEquals(84.00, portfolio.getTotalValue());}} 如您所见在setUp期间我们正在创建新的Portfolio对象。 然后我们要求EasyMock为StockMarket接口创建一个模拟对象。 然后使用Portfolio.setStockMarket方法将此模拟对象注入到投资组合对象中。 在Test方法中我们使用以下代码定义模拟对象在调用时的行为 EasyMock.expect(marketMock.getPrice(EBAY)).andReturn(42.00);
EasyMock.replay(marketMock); 因此在我们的模拟对象的getPrice方法之后 用EBAY调用时将返回42.00 。 然后我们将创建2个数量的ebayStock 并将其添加到我们的投资组合中。 由于我们将EBAY的股价设置为42.00因此我们知道投资组合的总价值为84.00即2 x 42.00。 在最后一行我们使用JUnit assertEquals方法声明相同的内容。 如果我们在getTotalValue代码中没有犯任何错误则上述测试应成功运行。 否则测试将失败。 结论 因此这就是我们使用EasyMock库模拟外部服务/对象并在我们的测试代码中使用它们的方式。 EasyMock可以做的比我在本文中显示的要多。 我可能会在下一篇文章中尝试介绍一些高级用法方案。 参考 EasyMock教程– Veera Sundar博客上的JCG合作伙伴 Veera Sundar 入门 。 翻译自: https://www.javacodegeeks.com/2012/07/easymock-tutorial-getting-started.html