Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Test Calculadora

Estou gostando muito do curso e como iremos refatorar muito o código, achei interessante implementar tests para ir validando se tudo ocorre dentro dos conformes e praticar o curso já estudado.

Criei esse teste da calculadora (na fase inicial, quando os cálculos são realizados ainda passando por string) e gostaria de saber se algo mais que possa ser refatorado nesse código:

<?php

namespace Alura\DesignPattern\Tests;

use Alura\DesignPattern\CalculadoraDeImpostos;
use Alura\DesignPattern\Orcamento;
use PHPUnit\Framework\TestCase;


class CalculadoraImpostoTest extends TestCase
{
    /** 
     * @test 
     * @dataProvider calculadoraProvider
     * */
    public function calculadoraIssDeveCalcularCorretamente($orcamento, $criterio, $experado)
    {

        $calculadora = new CalculadoraDeImpostos();
        $calculo = $calculadora->calcula($orcamento, $criterio);

        self::assertEquals($experado, $calculo);
    }

    public function calculadoraProvider()
    {
        $orcamento = new Orcamento();
        $orcamento->valor = 1200;

        return [
            'calculadoraIssDeveCalcularCorretamente' => ['orcamento' => $orcamento, 'criterio' => 'ISS', 'experado' => 72],
            'calculadoraIcmsDeveCalcularCorretamente' => ['orcamento' => $orcamento, 'criterio' => 'ICMS', 'experado' => 120]
        ];
    }
}
2 respostas
solução!

Oi Leandro beleza?

Muito bom você estar praticando os testes. Gostei bastante de ter usado data provider para evitar repetição de código para testes idênticos, a única que coisa que eu alteraria era o nome do teste por algo mais descritivo, assim como em cada provider.

Observe que vc usou "calculadoraIssDeveCalcularCorretamente" como nome do teste, porém realiza testes para ISS e ICMS através do data provider. Eu deixaria o nome mais genérico, como por exemplo, "deveCalcularOrcamento" e no datava provider especificaria qual imposto estou usado : "comIss" e "comICMS".

Verdade mesmo, nem tinha percebido!! Obrigado pela dica!!