我刚刚写了一个fuzz测试,它基本上检查对同一函数的两个不同输入的调用是否会产生不同的结果。我想告诉Elm-test,不允许输入相等;否则,此测试用例失败的概率很低。
我不想通过从第一个输入派生第二个输入来使它们不相等,因为这严重限制了搜索空间。
我如何告诉Elm-test fuzzer它生成的两个输入不能相等?
编辑:
这是我写的一个理智测试:
fuzz3 Fuzz.string Fuzz.int Fuzz.int "Decryption is not possible with wrong key" <|
\msg keySeed keySeed2 ->
let
key =
createKey keySeed
key2 =
createKey keySeed2
in
let
encryptedMessage =
encrypt key msg
in
Expect.equal Nothing (decrypt key2 encryptedMessage)发布于 2016-12-08 20:45:23
您可以创建一个fuzzer,它生成一个具有唯一值的元组,如下所示:
uniqueTuple : Fuzzer comparable -> Fuzzer (comparable, comparable)
uniqueTuple fuzzer =
let
uniquer (a, b) =
if a == b then
tuple (constant a, fuzzer)
|> Fuzz.andThen uniquer
else
constant (a, b)
in
tuple (fuzzer, fuzzer)
|> Fuzz.andThen uniquer这个想法是,它需要一个现有的fuzzer (如int),然后生成一个元组。如果这两个值相等,它将保留第一个值,并尝试为第二个值生成一个新的模糊化值。它递归地执行此操作,直到值不同为止。
您可以仅使用以下命令在fuzzer上运行测试:
fuzz (uniqueTuple int) "All pairs are unique" <|
\(a, b) ->
Expect.notEqual a bhttps://stackoverflow.com/questions/41034482
复制相似问题