簡體   English   中英

如何對紙牌游戲的Deal功能進行基於屬性的測試?

[英]How would I perform property-based testing on a card game's Deal function?

我正在研究基於屬性的測試,並且很好奇如何將這種測試應用於BlackJack游戲的Deal功能。

這是一個單元測試(又名:基於示例的測試):

[<Test>]
let ``deal two cards`` () =
    let hand = 2
    let dealPlayer cardCount = 
        [for i in [1..cardCount] -> shuffleDeck.Pop] 
        |> Seq.toList

    (dealPlayer hand).Length |> should equal (2)

基於屬性的測試的示例是什么?

  • 我會測試兩張卡是否在4套西裝范圍內? (例如黑桃,鑽石,紅心,球桿)是否已經可以依靠靜態類型對我而言呢?

  • 我會測試兩張卡片是否在數字或面孔范圍內? (即2..10; Jack; Queen; King; Ace)再次,對我來說,依靠靜態類型已經可以確保嗎?

同樣,在對二十一點游戲進行基於屬性的測試時,應該考慮什么?

如果使用代數數據類型對域(在本例中為紙牌游戲)建模,則類型系統會為您處理許多事情。

這里這里已經有一些模擬紙牌游戲的示例,但是從本質上講,您可以像這樣進行建模:

type Suit = Diamonds | Hearts | Clubs | Spades
type Face =
    | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten
    | Jack | Queen | King | Ace

type Card = { Suit: Suit; Face: Face }

使得非法國家不可代表 ,這意味着檢驗SuitDiamondsHeartsClubs還是Spades之一甚至沒有意義; 這些是它唯一可以擁有的值。

在對二十一點游戲進行基於屬性的測試時,應該考慮什么?

我不知道,這是您要找出的(我也不知道二十一點的規則),但這是一個應用於網球規則的基於屬性的測試示例

體育和游戲容易成為基於屬性的測試的目標,因為游戲規則會映射到屬性。

通常,屬性是域的不變式 鑒於某些先決條件得到滿足, 你運動的SUT那么一定要后置條件持有。

您也可以考慮觀看我的《基於F# Pluralsight 的基於屬性的測試入門》課程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM