|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
唉!都是钱闹的1.Swing和.net网页编程开发比较------从市场份额看.net网页编程开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具在已往,我会常常向你展现EasyMock是甚么和如何利用它测试你的Java使用。基于这个目标,我将创立一个复杂的股票程序并利用JUnit和EasyMock库测试。
在入手下手之前,让我们先了解一下利用EasyMock的需求。到场,你在创立一个Android挪动使用用来猎取用户股票档案。你的使用必要利用股票市场服务从正式服务器来检索股票代价(比方纳斯达克)。
当你入手下手测试代码的时分,你大概不会想要往利用实在股票市场服务器来猎取股票代价。相反,你大概但愿来些假造代价数据。以是你必要摹拟股票市场服务然后前往假造数据,而不往会见实在服务器。
EasyMock就是用来干这事的--帮你摹拟接口。你能够预界说一些摹拟对象的举动,然后在测试代码时利用摹拟这些对象。由于你体贴的是测试你的代码逻辑而不是内在服务和对象。因而。
为了使之明晰,请看一下上面的代码择要:
1StockMarketmarketMock=EasyMock.createMock(StockMarket.class);
2EasyMock.expect(marketMock.getPrice("EBAY")).andReturn(42.00);
3EasyMock.replay(marketMock);
第一行,我们请求EasyMock创立一个服务于StockMarket接口的摹拟对象。然后第二行,我们界说了这个假造对象的举动--比方当getPrice()对象被挪用并传送“EBAY”参数时,摹拟对象将前往42.00.然后我们挪用replay()办法时,将使摹拟对象备用。
如许就差不错联系关系好了EasyMock的高低文了和它的基础利用。接上去将深切我们的证挥τ谩
注重:点击此处下载Github上的源码
证卷使用
我们的证券使用十分复杂。有一个Stock类来存储股票名和数目,Portfolio类来保留股票列表。Portfolio类有一个办法用来盘算证券的总代价。我们的类用StockMarket对象来检索股票代价。当测试我们的代码时,我们将利用EasyMock来摹拟StockMarket。
Stock.java
01packagecom.veerasundar.easymock;
02
03publicclassStock{
04
05privateStringname;
06privateintquantity;
07
08publicStock(Stringname,intquantity){
09this.name=name;
10this.quantity=quantity;
11}
12
13publicStringgetName(){
14returnname;
15}
16
17publicvoidsetName(Stringname){
18this.name=name;
19}
20
21publicintgetQuantity(){
22returnquantity;
23}
24
25publicvoidsetQuantity(intquantity){
26this.quantity=quantity;
27}
28
29}
StockMarket.java
用来摹拟股票市场服务的接口。它包括一个经由过程给定股票名前往代价的办法。
1packagecom.veerasundar.easymock;
2
3publicinterfaceStockMarket{
4publicDoublegetPrice(StringstockName);
5}
Portfolio.java
该对象包括了Stock对象列表和一个盘算证券总代价的办法。它利用StockMarket对象来检索股票代价。可是硬编码依附不是好的理论,我们不该该在此就初始化stockMarket对象,我们应当在利用测试代码的时分注进出去。
01packagecom.veerasundar.easymock;
02
03importjava.util.ArrayList;
04importjava.util.List;
05
06publicclassPortfolio{
07
08privateStringname;
09privateStockMarketstockMarket;
10
11privateList<Stock>stocks=newArrayList<Stock>();
12
13/*
14*thismethodgetsthemarketvalueforeachstock,sumsitupandreturns
15*thetotalvalueoftheportfolio.
16*/
17publicDoublegetTotalValue(){
18Doublevalue=0.0;
19for(Stockstock:this.stocks){
20value+=(stockMarket.getPrice(stock.getName())*stock
21.getQuantity());
22}
23returnvalue;
24}
25
26publicStringgetName(){
27returnname;
28}
29
30publicvoidsetName(Stringname){
31this.name=name;
32}
33
34publicList<Stock>getStocks(){
35returnstocks;
36}
37
38publicvoidsetStocks(List<Stock>stocks){
39this.stocks=stocks;
40}
41
42publicvoidaddStock(Stockstock){
43stocks.add(stock);
44}
45
46publicStockMarketgetStockMarket(){
47returnstockMarket;
48}
49
50publicvoidsetStockMarket(StockMarketstockMarket){
51this.stockMarket=stockMarket;
52}
53}
至此,我们便完成了全部使用的编码,接上去我们将测试Portfolio.getTotalValue()办法,由于那是我们的营业逻辑地点。
用JUnit与EasyMock测试Portfolio使用
PortfolioTest.java
01packagecom.veerasundar.easymock.tests;
02
03importjunit.framework.TestCase;
04
05importorg.easymock.EasyMock;
06importorg.junit.Before;
07importorg.junit.Test;
08
09importcom.veerasundar.easymock.Portfolio;
10importcom.veerasundar.easymock.Stock;
11importcom.veerasundar.easymock.StockMarket;
12
13publicclassPortfolioTestextendsTestCase{
14
15privatePortfolioportfolio;
16privateStockMarketmarketMock;
17
18@Before
19publicvoidsetUp(){
20portfolio=newPortfolio();
21portfolio.setName("Veerasportfolio.");
22marketMock=EasyMock.createMock(StockMarket.class);
23portfolio.setStockMarket(marketMock);
24}
25
26<ahref="http://my.oschina.net/test45"rel="nofollow"target="_blank">@Test</a>
27publicvoidtestGetTotalValue(){
28
29/*=Setupourmockobjectwiththeexpectedvalues*/
30EasyMock.expect(marketMock.getPrice("EBAY")).andReturn(42.00);
31EasyMock.replay(marketMock);
32
33/*=Nowstarttestingourportfolio*/
34StockebayStock=newStock("EBAY",2);
35portfolio.addStock(ebayStock);
36assertEquals(84.00,portfolio.getTotalValue());
37}
38
39}
正如你所看到的,在setUp()挪用时我们创立新的Portfolio对象。然后我们挪用EasyMock请求为StockMarket接口创立一个摹拟对象。然后我们利用Portfolio.setStockMarket()办法将这个对象注进到Portfolio对象。
在@Test办法,我们利用以下代码界说摹拟对象的举动:
1EasyMock.expect(marketMock.getPrice("EBAY")).andReturn(42.00);
2EasyMock.replay(marketMock);
如许一来,当getPrice()办法带有“EBAY”的参数被挪用的时分,将会前往42.00。
然后我们创立了一个数目为2的ebayStock股票,并将其增加到我们的Portfolio中。将我们设置EBAY代价为42.00时,我们便晓得股票的总代价为84.00(2*42.00)。在最初一行,我们利用assertEquals()举行了一样的声明。
假如getTotalValue()中代码不堕落的话,以上测试应当会乐成,不然测试将会失利。
结论
以上即是假如利用EasyMock库摹拟内部服务/对象和在测试代码中利用的示例。
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢? |
|