测试“复杂”操作:类似风险的棋盘游戏部署

时间:2012-07-28 08:45:14

标签: ruby-on-rails unit-testing tdd

我使用Ruby on Rails开发一个类似风险的游戏,我必须开发一个程序来在字符之间调度(随机)区域并发送(随机)字符'单位到他们的领土。

该游戏有42个区域,共5个字符。 3个字符可获得8个地区,2个字符可获得9个地区。每个角色有25个单位的池(27个有9个地区的单位)在分配的地区之间派遣。每个地区必须至少有一个单位。

我的模型如下。如果需要,我可以改变它。

  • 用户;
  • 游戏;
  • 区域;
  • 角色,将用户绑定到游戏,保留要部署的其余单位;
  • 区域,将角色链接到某个区域,并保留该区域的单位数。

现在这是我的想法。

  • 我应该将这两项行动(地区派遣和单位派遣)分开,即使其效率较低;
  • 为了更容易测试,输出状态应该与相同的输入相同:随机部分应该来自外部。

你会为这种情况写什么断言? 我使用默认的Rails 3测试堆栈:Test :: Unit和fixture。

The code is available on GiitHub

谢谢!

2 个答案:

答案 0 :(得分:1)

你需要的断言看起来很简单:

  • 游戏有42个地区

  • 包含5个字符。

  • 3个字符可获得8个地区,2个字符可获得9个地区。

  • 每个角色都有25个单位的

依此类推......

  

我的模型如下。如果需要,我可以改变它。

     
      
  • 用户;
  •   
  • 游戏;
  •   
  • 区域;
  •   
  • 角色,将用户绑定到游戏,保留要部署的其余单位;
  •   
  • 区域,将角色链接到某个区域,并保留该区域的单位数。
  •   
     

现在这是我的想法。

     
      
  • 我应该将这两项行动(地区派遣和单位派遣)分开,即使其效率较低;
  •   
  • 为了更容易测试,输出状态应该与相同的输入相同:随机部分应该来自外部。
  •   

作为旁注,我认为你在这里的前期设计已经走得太远了。 TDD应该让你的代码设计出现并发展,所以当你最初可以坚持这些预先建立的规则时,你不应该害怕对它们进行修改,甚至在你编写测试时完全消除它们

测试驱动器实现的最佳方法是先进行第一次测试,然后进行另一次测试......逐步发现最佳设计似乎是什么,而不是尝试从一开始就建立一个完美的模型。

答案 1 :(得分:-1)

某些PlayerSelector不会有用吗?

可能是玩家selectPlayer()或玩家ID的方法。 然后你可以使用某种CyclicSelector存根进行选择确定性... 您选择的第一个国家/地区为player1,第二个为播放器2,3,1,2,3等。