André Ferreira
4 Jan 2023
•
2 min read
Hello! In this article, let’s set up a simple project in Erlang with unit testing, following the basic steps of Test-Driven Development (TDD), using the Erlang build tool Rebar3 and the unit testing framework EUnit.
I want to give beginners and professionals a primary starting point for developing in Erlang with testing. With more helpful content made about fundamentals of software engineering applied in a functional programming language, it can make the interest in this language rise and at least experiment with developing projects with the language.
You must have [Erlang](Index - Erlang/OTP) and [Rebar3](Getting Started | Rebar3) installed on your computer.
Let’s go! In the terminal, in a chosen directory, let’s create a simple project with Rebar3:
rebar3 new app simple_app
This will create a directory called simple_app
, that will contain the following content:
src/
simple_app.erl
simple_app_sup.erl
simple_app.app.src
rebar.config
.gitignore
LICENSE
README.md
Let’s start creating a simple unit test. First, we create a folder called test
inside the simple_app
directory. The directory should have the following structure:
src/
simple_app.erl
simple_app_sup.erl
simple_app.app.src
test/
rebar.config
.gitignore
LICENSE
README.md
Once created, we enter the folder and create a file called simple_app_test.erl
. In this file, we write the following code:
-module(simple_app_test).
-include_lib("eunit/include/eunit.hrl").
add_test() ->
?assertEqual(5, simple_math:add(2, 3)).
The project should now have the structure below:
src/
simple_app.erl
simple_app_sup.erl
simple_app.app.src
test/
simple_app_test.erl
rebar.config
.gitignore
LICENSE
README.md
Now, execute the test:
rebar3 eunit
The following output should appear:
Failures:
1) simple_app_test:add_test/0: module 'simple_app_test'
Failure/Error: {error,undef,
[{simple_math,add,[2,3],[]},
{simple_app_test,'-add_test/0-fun-0-',0,
[{file,
<test-file-location>},
{line,5}]},
{simple_app_test,add_test,0,[]}]}
Output:
Finished in 0.007 seconds
1 tests, 1 failures
===> Error running tests
As predicted, it failed. Now we go create the function add
to make the test work.
Let’s be organized and create the lib
folder in the simple_app
directory, where we will put the file with the add
function. The simple_app
directory should have the following structure:
lib/
src/
simple_app.erl
simple_app_sup.erl
simple_app.app.src
test/
simple_app_test.erl
rebar.config
.gitignore
LICENSE
README.md
Inside the lib
folder, we will create the file simple_math.erl
, where we will write the following code:
-module(simple_math).
-export([add/2]).
-spec(add(integer(), integer()) -> integer()).
add(Val1, Val2) -> Val1 + Val2.
Now, we need to get the lib
folder to be recognized by Rebar3 in order to make the test work. In the rebar.config
, write the following:
{erl_opts, [debug_info, {src_dirs, [“src”, “lib”]}]}.
{deps, []}.
{shell, [ % {config, "config/sys.config"}, {apps, [simple_app]}
]}.
{eunit_tests, [{module, simple_app_test}]}.
Finally, we execute the test again. The following output should appear:
Finished in 0.005 seconds
1 tests, 0 failures
That means the test has succeeded.
Thanks for reading! If you want to know more about unit testing with Erlang, check the section in the online book ‘[Learn you some Erlang for great good!](EUnited Nations Council | Learn You Some Erlang for Great Good!)’ dedicated to EUnit!
Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ
108 E 16th Street, New York, NY 10003
Join over 111,000 others and get access to exclusive content, job opportunities and more!