我正在开发二十一点游戏。我的游戏对象包含一个牌组对象,该牌组在牌组达到一定程度的穿透后会被洗牌。我的许多方法都依赖于这个甲板对象。我看不出有任何理由可以通过 setter 方法访问甲板对象。我在测试我的 Game 类上的方法时遇到了麻烦,因为它们取决于牌组的顺序,这是随机的。
例如,我有 deal_hand 方法。
def deal_hand(player)
reset_deck if @deck.size < 2
player.hands.push(Hand.new(*@deck.pop(2)))
end
我应该如何测试这样的方法?我在想我可以手动创建一个在 @deck 实例变量中使用的 Deck 对象。不幸的是,我不能设置实例变量,我也不想添加一个设置器,因为除了测试之外没有理由让它成为“可设置的”。我应该从我的测试文件中修补类并添加一个设置器吗?
顺便说一句——我主要编写脚本——我决定在这个项目失控后开始编写测试。是否有“测试模式”的规范资源?
编辑:
我正在使用支持存根/模拟的 MiniTest。尽管据我所知,它只允许您为模拟对象上的方法调用设置预期的返回值。如果我制作了一个 Mock 甲板,实际的甲板对象也取决于一个内部数组。没有调用卡片组的代码直接访问数组。