No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Ruby

Curso de Ruby

Simón Soriano

Simón Soriano

Testing con MiniTest

20/39
Recursos

Aportes 11

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Testing guías de estilo

  • Siga las convenciones sobre nombres y rutas para los archivos de test. Esto evita que tus pruebas entren en conflicto con tu otro código.
  • Escribe un archivo de prueba para cada módulo que hagas.
  • Mantenga sus casos de prueba (funciones) cortos.
  • Aunque los casos de prueba son confusos, intente mantenerlos limpios y elimine cualquier código repetitivo
  • Crear funciones de ayuda que deshacerse de código duplicado.
  • El código duplicado hará que cambiar tus pruebas sea más difícil.
  • A veces, la mejor manera de rediseñar algo es simplemente eliminarlo y volver a empezar. No te apegues demasiado a tus test.
  • Aprende de metodologías

Conceptos extraídos de :

Link del repositorio MiniTest
https://github.com/seattlerb/minitest

Escribió mal el orden de los parámetrso de assert_equals.
Primero va el resultado esperado y después la función ejecutada.
Es decir, en test_sum_positives debería ser:

assert_equal 4, result

¿ Algún sitio o blog que recomiendes para aprender test en ruby ?

Cómo usar MiniTest


MiniTest es una librería de Ruby, ya viene incluida así que no es necesario instalarlo.

El autorun que está incluido en el require, se encargará de detectar automáticamente que dentro de nuestro archivo hay un test de Minitest, es cual lo ejecutará automáticamente sin necesidad de que explícitamente llamemos a ese test.

require "minitest/autorun"

class Calculator
    def sum(a,b)
        a + b
    end

    def substract(a,b)
        a - b
    end
end

# "< Minitest::Test" Este le indica que esta es nuestra clase de pruebas
class TestCalculator < Minitest::Test
    # En este método que se ejecuta una sola vez antes de ejecutar todo el set de prueba.
    def setup
        @calc = Calculator.new
    end

    # Aquí definimos los métodos con el prefijo 'test_'
    def test_sum_positives
        result = @calc.sum(1, 3)
        assert_equal result, 4
    end

    def test_sum_negatives
        result = @calc.sum(-1, -3)
        # Este método está incluido en Minitest, aquí vamos aprobar si la condición que le pasamos va ha ser verdadera y en caso contrario va a fallar la prueba.
        assert_equal result, -4
    end
end

A medida que avanza el curso , va agregando cosas nuevas como si ya lo supieramos , creo que tendria que explicar mas detalladamente…

Specs

Son una manera alternativa de hacer testing, y que a mi parecer es más elegante.

describe "Calculator" do
    before do
        @calc = Calculator.new
    end


    describe "5 + 5" do
        it "should give 10" do
            # 5 + 6 = 11 (fallo intencional)
            assert_equal 10, @calc.sum(5, 6)
        end
    end

    describe "10 - 18" do
        it "should give -8" do
            # 10 - 17 = -7 (fallo intencional)
            assert_equal -8, @calc.minus(10, 17)
        end
    end
end

El output de este código es:

Run options: --seed 7360

# Running:

FF

Finished in 0.004435s, 450.9584 runs/s, 450.9584 assertions/s.

  1) Failure:
Calculator::5 + 5#test_0001_should give 10 [main.rb:36]:
Expected: 10
  Actual: 11

  2) Failure:
Calculator::10 - 18#test_0001_should give -8 [main.rb:43]:
Expected: -8
  Actual: -7

2 runs, 2 assertions, 2 failures, 0 errors, 0 skips

El cual me parece bastante más legible para los humanos que (hecho con el unit testing del curso):

Run options: --seed 22398

# Running:

.F

Finished in 0.004561s, 438.4729 runs/s, 438.4729 assertions/s.

  1) Failure:
TestCalculator#test_minus [main.rb:23]:
Expected: -10
  Actual: -9

2 runs, 2 assertions, 1 failures, 0 errors, 0 skips

Creo que deberian de actulizar este curso me deja patinando, creo que merece una mejor explicacion de muchas cosas, aunque a la larga te ayuda a ser mas autodidacta porque aqui veo queexplica y me voy buscar una mejor explicacion en cualquier otra plataforma.

UnitTest y MiniTest ya no forman parte del core de ruby, se tienen que instalar

Me pregunto si no deberian realizar 3 resultados OK y no 2.

Falto la suma mixta.
Dejo el codigo.

require "minitest/autorun"

class Calculator
  def sum(a,b)
    a + b
  end

  def substract(a,b)
    a - b
  end
end

class TestCalculator < Minitest::Test

  def setup
    @calc = Calculator.new
  end

  def test_sum_positives
    result = @calc.sum(1,  3)
    assert_equal result, 4
  end

  def test_sum_negatives
    result = @calc.sum(-1,  -3)
    assert_equal result, -4
  end

  def test_sum_mixed
    result = @calc.sum(1,  -3)
    assert_equal result, -2
  end

end

Me pareció raro se que definieran dos funciones con el mismo nombre.