Создание структурированных карт с помощью test.check
Я играю с test.check, и я тестирую функцию, которая принимает карту в качестве аргумента. Эти карты имеют определенную структуру, такую как:
{:name "Bob" :age 42 :email "bob@example.com" :admin true}
Ключевым моментом является наличие набора ожидаемых ключей, значения которых имеют четко определенные генераторы.
Я посмотрел на gen/map
, но не очевидно, как использовать его для более структурированных пар ключ / значение:
(gen/sample (gen/map gen/keyword gen/boolean) 5)
;; => ({} {:z false} {:k true} {:v8Z false} {:9E false, :3uww false, :2s true})
Это похоже на простой сценарий, но я не могу найти пример.
Как я могу создать структурированные карты, такие как описанная здесь, используя test.check?
1 ответ
Решение
Использование gen/hash-map
вместо gen/map
,
=> (gen/sample (gen/hash-map :name gen/string
:age gen/int
:email email-gen ; from test.check examples
:admin gen/boolean))
({:email "00w@hotmail.com", :age 0, :name "", :admin true}
{:email "mi6@computer.org", :age -1, :name "Á6", :admin false}
{:email "Ux4gp@hotmail.com", :age 4, :name "z", :admin true})