Writing the First Test

The first property doesn’t have to be fancy. In fact, it’s better if it’s simple. Start with something trivial-looking that represents how we want to use the program. Then, our job as developers is to make sure we can write code that matches our expectations, or to change them. Of our two properties, the simplest one concerns counting sums without caring about specials.

You’ll want to avoid a property definition such as sum(ItemList, PriceList) =:= checkout:total(ItemList, PriceList, []) since that would risk making the test similar to the implementation. A good approach to try here is generalizing regular example-based tests. Let’s imagine a few cases:

 20 = ​checkout​:​total​([​"A"​,​"B"​,​"A"​], [{​"A"​,5},{​"B"​,10}], ...

Get Property-Based Testing with PropEr, Erlang, and Elixir now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.