Elixir Testing with ExUnit

From Elixir Wiki
Jump to navigation Jump to search

Elixir Testing with ExUnit[edit]

Introduction[edit]

ExUnit is a powerful testing framework in the Elixir programming language that allows developers to write and run tests to ensure the correctness of their code. It provides a simple and intuitive syntax for describing and organizing tests, making it easy to write comprehensive test suites.

Getting Started[edit]

To use ExUnit, you need to include the `ExUnit.Case` module and define a test case. Each test case is a module that uses `ExUnit.Case` and contains one or more test functions. These test functions should be defined with `test` followed by a meaningful name and a do block.

```elixir defmodule MyTestCase do

 use ExUnit.Case
 
 test "addition" do
   assert 1 + 1 == 2
 end

end ```

Asserting and Refuting[edit]

ExUnit provides a wide range of assertions to validate the behavior of your code. These assertions can be used to check equality, inequality, type, exceptions, and more. Additionally, ExUnit allows you to refute assertions to ensure certain conditions are not met.

```elixir defmodule MyTestCase do

 use ExUnit.Case
 
 test "equality" do
   assert 1 + 1 == 2
   refute 1 + 1 == 3
 end
 
 test "type" do
   assert is_binary("hello")
   refute is_list("hello")
 end

end ```

Test Organization[edit]

ExUnit supports the organization of tests into test modules and test cases. By grouping related tests, you can easily manage and run specific subsets of your tests.

```elixir defmodule MathTests do

 use ExUnit.Case, async: true
 
 describe "addition" do
   test "positive numbers" do
     assert 1 + 1 == 2
   end
   
   test "negative numbers" do
     assert -1 + -1 == -2
   end
 end
 
 describe "subtraction" do
   test "positive numbers" do
     assert 5 - 3 == 2
   end
   
   test "negative numbers" do
     assert -5 - -3 == -2
   end
 end

end ```

Test Setup and Teardown[edit]

ExUnit allows you to define setup and teardown functions to prepare the test context before each test and clean up afterwards. These functions can be defined using `setup` and `teardown`, respectively.

```elixir defmodule MyTestCase do

 use ExUnit.Case
 
 setup do
   {:ok, socket: SocketServer.start_link()}
 end
 
 teardown %{socket: socket} do
   :ok = SocketServer.stop(socket)
 end
 
 test "sending data" do
   assert :ok = SocketServer.send_data(socket, "Hello, world!")
 end

end ```

Running Tests[edit]

To run tests using ExUnit, you can use the `mix test` command in your project's root directory. This will run all the tests defined in your project. Additionally, you can use `mix test path/to/test_file.exs` to run a specific test file.

ExUnit provides several options to customize the test execution, such as running tests in parallel, filtering tests by tags, and more. Refer to the ExUnit documentation for more details.

Conclusion[edit]

ExUnit is a robust testing framework for Elixir that empowers developers to write clear and comprehensive test suites. By utilizing the features provided by ExUnit, you can ensure the correctness and reliability of your Elixir code. Happy testing!

See Also[edit]

  • [Link to another relevant article]
  • [Link to another relevant article]
  • [Link to another relevant article]