Meu "Hello, world"

Todo começo precisa de uma apresentação

Toda linguagem tem seu tutorial relacionado ao Olá, mundo, vamos fazer isso aqui também. Mas vamos focar também em como o teste funciona, mas primeiro precisamos criar um projeto usando o mix:

mix new hello_world

* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating lib
* creating lib/hello_world.ex
* creating test
* creating test/test_helper.exs
* creating test/hello_world_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

    cd hello_world
    mix test

Run "mix help" for more commands.

Uma vez criado, você terá a seguinte estrutura:

hello_world/
├─ lib/
│  ├─ hello_world.ex
├─ test/
│  ├─ hello_world_test.exs
│  ├─ test_helper.exs
├─ mix.exs
├─ README.md

O mix.exs é nosso manifesto, é ali que iremos definir tudo que será utilizado. Nome do projeto, versão, suas dependências e como será executado. A criação do projeto pelo mix nos facilita a etapa de configuração de projeto, saindo pronto para rodar, sem maiores complicações.

Dependências

Todas as dependências vem de um local chamada hex, o que facilita a inserção e atualização de bibliotecas no projeto. Elas são definidas dentro do arquivo mix.exs na função deps. Se algo estiver lá, sera gerido a dependencias de como foi configurada e adicionado ao projeto na pasta deps gerada na raiz do projeto, após rodar o comando para baixar as dependências. Para baixar as dependências basta rodar o comando mix deps.get .

mix deps.get

All dependencies are up to date

Nosso projeto ainda não possui nenhuma dependência, então a mensagem de "All dependencies are up to date" irá aparecer e podemos seguir.

Testando

Nosso foco de validação vai ser na pasta test na raiz do projeto. Lá estarão todos os testes do projeto e helpers para nos ajudar nisso.

No arquivo hello_world_test.exs está nosso primeiro código:

test/hello_world_test.exs
defmodule HelloWorldTest do
  use ExUnit.Case

  test "greets the world" do
    assert HelloWorld.hello() == :world
  end
end

Por padrão, elixir traz o ExUnit como ferramenta de teste. Obtemos capacidades de teste quando adicionamos o código use ExUnit.Case em nosso arquivo, dando suporte a funções de test, assert, describe e outros.

O código é bem autoexplicativo, temos uma teste chamado "greets the world" nele temos uma afirmação onde a resposta de HelloWorld.hello() deve ser igual a :world caso isso não ocorra, um erro será disparado.

Para rodar esse teste, podemos executar o comando onde executa todos os testes de uma vez ou somente um arquivo especifico. Vamos executar todos de uma vez:

mix test

Compiling 1 file (.ex)
Generated hello_world app
..
Finished in 0.02 seconds (0.00s async, 0.02s sync)
1 test, 0 failures

Ao executar o comando teremos um relatório de resposta, O nosso nos diz que rodados 1 doctest e 1 test e não tivemos nenhuma falha.

Caso a resposta esteja diferente do esperado, você poderá ver o erro no relatório. Vamos alterar o teste para esperar :new_world e ver o que o relatório nos trás.

test/hello_world_test.exs
defmodule HelloWorldTest do
  use ExUnit.Case

  test "greets the world" do
    assert HelloWorld.hello() == :new_world
  end
end

Basta agora rodar o teste e verificar o relatório:

mix test
.

  1) test greets the world (HelloWorldTest)
     test/hello_world_test.exs:5
     Assertion with == failed
     code:  assert HelloWorld.hello() == :new_world
     left:  :world
     right: :new_world
     stacktrace:
       test/hello_world_test.exs:6: (test)


Finished in 0.03 seconds (0.00s async, 0.03s sync)
1 test, 1 failure

No seu terminal terá cores melhores, em vermelho e verde, mas aqui já da de ter noção da resposta e também o que está incorreto. Vamos voltar agora o teste para tudo voltar a funcionar.

Os testes em elixir funcionam assim. São de extrema importância e simples de serem usados.

Conclusão

Teste é uma ferramentas importante no desenvolvimento de software, nos ajudando a garantir o comportamento de nossos códigos. Nós próximos capítulos iremos conhecer mais da linguagem por meio do teste, para já termos uma base boa de como as coisas funcionam. Espero ver vocês por lá.

Last updated