[英]Why should I really use Property-based testing if I already practice Example-based testing?
[英]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 }
這使得非法國家不可代表 ,這意味着檢驗Suit
是Diamonds
, Hearts
, Clubs
還是Spades
之一甚至沒有意義; 這些是它唯一可以擁有的值。
在對二十一點游戲進行基於屬性的測試時,應該考慮什么?
我不知道,這是您要找出的(我也不知道二十一點的規則),但這是一個應用於網球規則的基於屬性的測試示例 。
體育和游戲容易成為基於屬性的測試的目標,因為游戲規則會映射到屬性。
通常,屬性是域的不變式 。 鑒於某些先決條件得到滿足, 當你運動的SUT , 那么一定要后置條件持有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.