We're planting a tree for every job application! Click here to learn more

Unit testing in Erlang using Rebar3 and EUnit

André Ferreira

4 Jan 2023

2 min read

Unit testing in Erlang using Rebar3 and EUnit
  • Erlang

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.

Motivation

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.

Prerequisites

You must have [Erlang](Index - Erlang/OTP) and [Rebar3](Getting Started | Rebar3) installed on your computer.

Creating a project

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

Creating the test

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.

Making 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.

Conclusion

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!

Did you like this article?

André Ferreira

Functional programming enthusiast.

See other articles by André

Related jobs

See all

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Title

The company

  • Remote

Related articles

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

JavaScript Functional Style Made Simple

JavaScript Functional Style Made Simple

Daniel Boros

12 Sep 2021

WorksHub

CareersCompaniesSitemapFunctional WorksBlockchain WorksJavaScript WorksAI WorksGolang WorksJava WorksPython WorksRemote Works
hello@works-hub.com

Ground Floor, Verse Building, 18 Brunswick Place, London, N1 6DZ

108 E 16th Street, New York, NY 10003

Subscribe to our newsletter

Join over 111,000 others and get access to exclusive content, job opportunities and more!

© 2024 WorksHub

Privacy PolicyDeveloped by WorksHub