仓酷云

标题: JAVA网页编程之EasyMock教程--进门指南仓酷云 [打印本页]

作者: 简单生活    时间: 2015-1-18 11:29
标题: JAVA网页编程之EasyMock教程--进门指南仓酷云
唉!都是钱闹的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打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?
作者: 再现理想    时间: 2015-1-19 09:18
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 小妖女    时间: 2015-1-19 10:56
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
作者: 小魔女    时间: 2015-1-24 12:09
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 谁可相欹    时间: 2015-1-24 12:14
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 不帅    时间: 2015-2-1 10:33
是一种语言,用以产生「小应用程序(Applet(s))
作者: 精灵巫婆    时间: 2015-2-7 03:46
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者: 第二个灵魂    时间: 2015-2-20 07:27
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 透明    时间: 2015-3-2 23:07
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: 金色的骷髅    时间: 2015-3-7 18:39
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 若天明    时间: 2015-3-8 07:17
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者: 海妖    时间: 2015-3-11 15:12
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
作者: admin    时间: 2015-3-12 14:35
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 冷月葬花魂    时间: 2015-3-13 04:47
Java 编程语言的风格十分接近C、C++语言。
作者: 蒙在股里    时间: 2015-3-20 13:10
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者: 山那边是海    时间: 2015-4-11 03:10
Java是一种计算机编程语言,拥有跨平台、面向对java




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2