我正在做我的第一个真正的工作smallcheck
,我对如何使用有点困惑Depth
范围。在开始之前,让我先说明一下我正在使用什么smallcheck
for.
在工作中,我们在我们自己的内部数据库前构建一个简单的 Web 服务。 Web 服务执行一些查询,并以序列化为 JSON 的查询结果进行响应。我目前正在做的是确保:给定一个表示查询结果的对象,该对象会生成预期的 JSON。例如:
data Action
= Action { actionType :: !ActionType
, actionDescription :: !Text
, actionPerformedAt :: !UTCTime
, actionAgentName :: !Text
}
必须生成 JSON,例如:
{
"type": "Booking",
"description": "Whatever",
"performedAt": "2012-01-04",
"agent": "Tom"
}
这看起来是一个理想的任务smallcheck
,我将其表述如下:
testAction :: Tasty.TestTree
testAction = Tasty.testGroup "Action"
[ SmallCheck.testProperty "type" $
SmallCheck.over actions $ match $
Aeson.key "type" --> Aeson.toJSON . actionType
, SmallCheck.testProperty "dateActioned" $
SmallCheck.over actions $ match $
Aeson.key "dateActioned" --> expectedUTCTimeEncoding . actionPerformedAt
-- and so on
]
-- (-->) :: Eq a => lens-aeson traversal a -> (b -> a) -> b -> Bool
-- actions :: Monad m => SmallCheck.Series m Action
默认smallcheck
深度在tasty
框架为 5,这导致我尚未完成测试运行。smallcheck
有changeDepth
and changeDepth1
函数,所以我could使用这些作为changeDepth (const 3)
确保我的测试始终在合理的时间内运行。然而,这样做我不禁觉得我在某个地方错过了重点?例如,现在不可能通过仅更改命令行选项来运行测试来运行更长的测试(可能是一夜之间)。另一方面,如果我使用changeDepth (- 2)
,仍然感觉好像我在假设测试是如何运行的!也许最好假设全局测试深度为 5n秒,并且由每个属性来调整其认为合适的深度?
很想听到一些关于这个更实际的方面的反馈smallcheck
.