Using PropEr with erlang.mk
Sunday, 7th July, 2019
I have started working through Fred Hebert’s excellent Property-Based Testing with PropEr, Erlang, and Elixir (old but free version here). (n.b., PropEr’s own website is here). I plan to add property-based tests to my LIGA project.
Chapter 1 shows how to call PropEr from rebar3 (amd mix for Elixir). However, I prefer erlang.mk for my own projects, so here is a brief note on calling PropEr from erlang.mk.
*** howto
First, add PropEr as a test dependency to your Makefile:
TEST_DEPS = proper
Then …
$ make proper
… will run all the prop_*.erl files in test/
*** book example
For a quick look at usage & output I copied the book’s prop_base.erl into LIGA’s test/ directory.
First, using the failing version of prop_base.erl on p. 25:
$ make proper
GEN test-dir
GEN test-build
GEN proper
Testing prop_base:prop_biggest/0
.!
Failed: After 2 test(s).
An exception was raised: error:function_clause.
Stacktrace: [{prop_base,biggest,[[]],[{file,"test/prop_base.erl"},{line,22}]},
{prop_base,'-prop_biggest/0-fun-0-',1,
[{file,"test/prop_base.erl"},{line,19}]}].
[]
Shrinking (0 time(s))
[]
erlang.mk:6880: recipe for target 'proper' failed
make: *** [proper] Error 1
Second, using the succeeding version of prop_base.erl on p. 27:
$ make proper
GEN test-dir
GEN test-build
GEN proper
Testing prop_base:prop_biggest/0
....................................................................................................
OK: Passed 100 test(s).
*** next steps
- create generators for LIGA data types
- create properties for LIGA functions
- get them working, make them beautiful, …