[英]Haskell, IO, monads, quickcheck
Haskell的初學者在這里。
我有一個函數,以及一堆用於測試的屬性,這些屬性是我使用quickcheck編寫的。 當我在解釋器中分別運行屬性時,這些屬性便可以工作,並且該函數可以很好地進行檢查。
但是,手動對解釋器中的每個屬性進行手動快速檢查(quickCheck prop_this,quickCheck prop_that)很無聊,單調且耗時。 我想將所有這些都保留在一個程序中,並讓該程序運行所有的快速檢查。 這就是我卡住的地方。
該程序的基本框架如下:
imports...
function_which_i_want_to_quickcheck
prop_1
prop_2
etc...
main = do
quickCheck prop_1
quickCheck prop_2
etc...
我相信main之上的所有內容都可以,因為沒有它,它可以編譯和運行。 主要是我需要幫助的地方。 我嘗試了幾種變體,例如,沒有做,使用做,使用'x <-quickCheck y'分配結果,從內部移除quickCheck並將其粘貼在外部等,但無法進行任何操作工作。
任何人都可以協助上述工作嗎?
如果我想將main內部的所有內容移動到另一個(正常的非main函數)中,該怎么辦?
編輯:我感謝有關測試框架的建議,但是我在這里要問的是用任何其他語言進行的瑣碎工作,並且不需要測試框架。 為什么不選擇Haskell?
同樣,這在解釋器內部也可以正常工作。 我無法在main內部工作。 有什么想法嗎?
quickCheck prop_1 >> quickCheck prop_2 >> quickCheck prop_3
謝謝。
這是不是從你有什么問題,問題很清楚,但一般我會建議使用一個測試框架,比如可口 ,組織你的快速檢查測試在一起:
import Test.Tasty
import Test.Tasty.QuickCheck
main = defaultMain $ testGroup "Tests"
[ testProperty "+ is commutative" $
\x y -> x + y == (y + x :: Double)
, testProperty "+ is associative" $
\x y z -> (x + y) + z == (x + (y + z) :: Double)
]
要運行此程序,您需要安裝tasty-quickcheck
軟件包。
執行后的外觀如下:
我過去使用過TestFramework 。 它允許您創建任意嵌套的測試組,從而為您提供一種更改輸入參數的方法。
main = do
defaultMain $ [tier1_tests, ...]
tier1_tests = testGroup "Level One Tests" [tier2_tests1, tier2_tests2, ...]
tier2_tests1 = testGroup "Level Two Testgroup 1" [tier3_tests1, youGetTheIdea, ...]
]
tier3_tests1 = testGroup "Level Three Testgroup" [
testProperty "m=32 random encoding with good x" (prop_realTest1 8 32 True),
testProperty "m=256 random encoding bad x" (prop_realTest2 128 256 False),
... ]
prop_realTest1 m goodq b = forAll arbitrary (\ x -> ...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.