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?

o inicia sesi贸n.

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鈥

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

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.

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.