FitNesse-FixtureCode_2

2011-06-22  徐磊 

前一篇  FixtureCode_1   后一篇   FixtureCode_3

http://localhost:8888/FitNesse.UserGuide.FixtureCode

来点实际的:一个益智游戏 *_*!!

我们从简单的地方开始,那些复杂的问题像是分析地震数据,我们想想就可以了。因为它们实在是很复杂,不适合我们在这里拿来做示例。

这里设想我们正在制作一个益智游戏。这个游戏是这样的:游戏者轮流去转动一个圆形的木板。当它们在一个正方形区域停止时,游戏者就会被问到一个问题。我们还会有更多其他的需求和测试表,像是对于问题回答错误时,或者回答正确时。

现在我们设想我们面对一个需求,或者可以称它为用户故事(user story好听多了)

“我们可以增加游戏者到这个游戏中,同时我们可以查看现在有多少人在玩这个游戏。”

听起来很easy。我们先设定一个ClassPath,这个写的是我们项目的路径。没有ClassPathFitNesse找不到我们的夹具。

Classpath:C:\workspace\TriviaGameFitNesseExample\

测试表什么样子呢?

表略

表告诉我们,如果我们增加一个叫Al的用户到游戏里,游戏人数应为1,如果再增加一个叫Bertha的,游戏人数就为2了。

ADDREMOVEPLAYERFIXTURE的代码

夹具代码什么样子呢?下面这样如何:

代码略

我想这个有点复杂程度。代码表明什么?我们有个setPlayerName的设置器了,就如同我们需要的,我们还有了addPlayer()countPlayers()的方法。简单明了。

但是私有的Game是什么样的呢,这些方法调用是什么样的呢,还有为什么这样呢?

委托到真正的代码

夹具代码里的addPlayer()方法相当简单:它仅仅调用了Game类里的addPlayer()方法,而它才做了实际的工作。

代码略

       Game类把用户放到一个ArrayList里,并返回新Player的对象。playerIsPlaying方法返回一个用户是否在玩,getNumberOfPlayers()方法返回集合里的个数。这还不是一个益智游戏,但它满足了我们增加用户和数个数的需求。

       我们夹具代码里的addPlayer()方法调用了playerIsPlaying()方法判定对象是否添加成功:有明显意义的返回值。夹具代码里的countPlayers()也很明了:它仅仅调用了Game类里的getNumerOfPlayers

       但是StaticGame干什么用呢?

STATICGAME干什么用?

       我们测试表的每一行都单独的调用AddRemovePlayerFixture类。既然我们是把用户增加到一个相同的游戏中,我们每次都需要确保我们使用的是同一个游戏对象。

       更进一步说,我们会有很多测试页面来测试这个益智游戏。每个测试页面都会有很多表去测试各种情况下的游戏实例。我们需要它们使用的是同一个东西。所以我们需要单例的游戏对象来让大家共享。下面就是StaticGame的代码:

       代码略

       它仅仅是一个静态的Game实例变量。为了安全起见,它是抽象的,你不能实例化StaticGame

497°/4972 人阅读/0 条评论 发表评论

登录 后发表评论