我刚刚编写了一个模糊测试,它基本上检查了对不同输入的同一函数的两次调用会产生不同的结果。我想告诉Elm-test,输入不允许相等;否则此测试用例失败的可能性很小。
我不想通过从第一个输入中获取第二个输入来使它们不相等,因为这严重限制了搜索空间。
如何告诉榆树测试模糊器它产生的两个输入不能相等?
编辑:
这是我写的一个完整性测试:
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)
答案 0 :(得分:2)
您可以创建一个模糊器,生成一个具有如下唯一值的元组:
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
这个想法是它需要一个现有的模糊器(如int
),然后生成一个元组。如果两个值相等,则保持第一个并尝试为第二个值生成新的模糊值。递归执行此操作直到值不同。
你可以单独使用模糊测试器进行测试:
fuzz (uniqueTuple int) "All pairs are unique" <|
\(a, b) ->
Expect.notEqual a b