下棋游戏的基于属性的测试

时间:2019-03-21 04:55:33

标签: haskell testing chess

我正在尝试将注意力放在基于属性的测试和国际象棋上。目前,我将棋类游戏表示为2D阵列,而我实现的唯一部件是用来作怪的典当和骑士。

典当和骑士将其移动表示为allMoves(x,y) \ invalidMoves(board,x,y)的集合。因此,我可以想到的一个属性是测试allMoves(x,y) ∪ invalidMoves(board,x,y) === allMoves。但是除此之外,我不确定还需要测试什么。我认为我需要为国际象棋棋盘建立一个简化的Oracle模型,但是我不确定这样的模型是什么。

1 个答案:

答案 0 :(得分:7)

首先,请说一些关于现实棋盘的真实事实,无论它们听起来多么愚蠢。其中许多将是要测试的合理属性。这里有一些想法:

  • 移动一件物品时,它会从原处移动到放置物品的地方。
  • 没有合法的骑士举动就是合法的典当行。
  • 典当从不会一次移动超过两个方块。
  • 骑士永远不会移动到其起始位置附近。
  • 此举仅应涉及董事会中的实际职位。
  • 移动到另一块上可以减少板上的块数。

还有更多类似的想法。它们看起来很简单,但是我保证您的早期实现会错过其中的一些。弄清楚如何将这些不变式写为属性,并从那里扩展测试套件。