DEV Community

Cover image for O que é REPL Driven Development?
Gabriel Grubba
Gabriel Grubba

Posted on • Originally published at blog-grubba.vercel.app

O que é REPL Driven Development?

REPL Driven Development

Como desenvolvedores em 2021, devemos escrever testes de unidade, de integração, porém muitas vezes empacamos nesse processo, hoje vou mostrar como o Clojure tem me deixado melhor nisso de testar e analisar o meu próprio código.

REPL

Para começar o que é o REPL ? Read-Eval-Print Loop é um terminal onde você pode testar as suas funções e ver seus resultados em tempo real. Isso parece algo simples e que temos no Node, mas nunca tinha visto que isso poderia me ajudar no meu workflow até mexer um pouco com Clojure, onde o REPL Driven Development e o TDD andam de mãos dadas. Para exemplificar temos essa função:

(defn blocked-in-source-tax
  "Retorna a quantia que foi bloqueada na fonta baseado nesse teste: abaixo de 1000, não bloqueia nada, depois de 1000, retorna 10% do valor. 
Tabela verdade: 1000 > $ -> $ *.10 "
  [money]
  (let [max-money-value 1000
        retained-percentage 0.10 ]
    (cond
      (<= money 0) "err"
      (< money max-money-value) 0
      (>= money max-money-value) (* money retained-percentage))))
Enter fullscreen mode Exit fullscreen mode

É um código simples em clojure mas para ter certeza que estava condizente com a regra de negocio eu usei o REPL, usei essa função com o valor de 999 para ver se me retornava 0, ao invés de compilar o programa inteiro para ver se estava certo e dai escrever os testes, usei o REPL da seguinte forma:

(blocked-in-source-tax 400)
=> 0
(blocked-in-source-tax 2100)
=> 210.0
Enter fullscreen mode Exit fullscreen mode

Se olharmos a descrição da função e seus resultados testados no REPl podemos dizer que está funcionando como deveria, agora falta escrever os testes. Como tudo em LISP e Clojure, é bem simples escrever testes, os que escrevi para essa função são esses

(deftest blocked-in-source-tax-min-test
  (testing "Given an input lower than 1000 it should return 0"
    (is (= 0 (blocked-in-source-tax 999)))
    (is (= 0 (blocked-in-source-tax 400)))
    (is (= 0 (blocked-in-source-tax 1)))))

(deftest blocked-in-source-tax-max-test
  (testing "Given an input bigger than 1000 it should return 10%"
    (is (= 100.0 (blocked-in-source-tax 1000)))
    (is (= 210.0 (blocked-in-source-tax 2100)))))
Enter fullscreen mode Exit fullscreen mode

Depois dessa facilidade que eu descobri do RELP, fui atrás do mesmo em Node e descobri que temos isso. link para REPL no node
Seguir esse workflow, de criar funções e coleções de funções podem ser mais facilmente validades e depois criado testes se usássemos esse modelo de REPL com TDD.

Mais referencias

Além de ler um pouco sobre essa maravilhosa pratica, gostaria de deixar mais um link onde me ajudou muito
demostração de REPL (em inglês)
Esse site me ajuda bastante quando tenho dúvidas do clojure e pretendo fazer mais conteúdos em Pt-BR sobre a linguagem.

Top comments (0)