我正在进行二十一点游戏。我的游戏对象包含一个甲板对象,在甲板达到一定的穿透水平后被洗牌。我的许多方法都依赖于这个deck对象。我没有看到通过setter方法可以访问deck对象的任何理由。我在测试Game类的方法时遇到了麻烦,因为它们依赖于随机的牌组顺序。依赖于基本上随机的实例变量的测试方法
例如,我有deal_hand方法。
def deal_hand(player)
reset_deck if @deck.size < 2
player.hands.push(Hand.new(*@deck.pop(2)))
end
我该如何测试这样的方法?我想我可以手动创建一个在@deck实例变量中使用的Deck对象。不幸的是,我不能设置实例变量,而且我也不想添加setter,因为除了测试之外没有理由要“可设置”。我应该从我的测试文件中修补这个类并添加一个setter?另外 - 我主要写脚本 - 我决定在这个项目失控后我需要开始编写测试。是否有任何“测试模式”的规范资源?
编辑:
我使用MINITEST,支持存根/嘲讽。尽管据我所知,它只允许您为模拟对象上的方法调用设置预期返回值。如果我制作了一个模拟套牌,实际的套牌对象也依赖于一个内部数组。调用卡组的代码都不直接访问数组。
如何在第一个地方的@deck设置? – 2013-03-24 07:51:08
你打开一个重构建议,可以使这个更容易测试?如果不是这样的话:-) – 2013-03-24 08:05:38
是的,我会的。 @deck是一个Card对象的数组,已随机随机播放!当Game.new被调用时它被设置。 – 2013-03-24 08:07:17