Mockeando dependencias dificiles – demasiados métodos static

Todos alguna vez hemos trabajado en aplicaciones legacy, sin test, que utilizan muchos o muchísimos métodos estáticos, o se instancian varios objetos dentro de métodos sin razón aparente. Esto hace que sea un castigo testar estas aplicaciones para aplicar un cambio y dormir tranquilos, pero queramos o no esto es parte de nuestro trabajo. A veces es posible refactorizar el código e inyectar dependencias, en cambio muchas otras veces el esfuerzo de refactorizar es tanto que no podemos permitírnoslo ya sea porque no tenemos suficientes test y hacerlos es costoso o porque no tenemos tanto tiempo como querríamos para hacerlo.

Continúa leyendo “Mockeando dependencias dificiles – demasiados métodos static”

Mejorando con Mockery – Separando responsabilidades

Hace poco empezamos haciendo nuestra primera kata de código utilizando phpunit. En una primera iteración conseguimos una calculadora totalmente funcional. El código de la kata está en github (http://github.com/jeslopcru/php-coding-dojo).
Esta vez vamos a dar un pequeño empujón a la kata, emepzando a utilizar Mockery y sobre todo vamos a seguir aprendiendo buenas prácticas de desarrollo. Para hacer más intenresante la kata podemos activar phpcs o php-cs-fixer para que antes de hacer un commit analicemos el proyecto para hacer que nuestro código se adapte a un estandar. Yo como guía para instalarlo he utilizado esta referencia (http://sergigp.com/phpstorm-integrando-herramientas-de-calidad-de-codigo)

¿Donde lo dejamos?

Teníamos una calculadora funcional, que era capaz de sumar y restar, pero quizás ese switch es algo “feo”. Para quien no lo recuerde este esta es la función que estamos comentando:

    protected function calculate($num, $symbol)
    {
        if (!is_numeric($num)) {
            throw new InvalidArgumentException();
        }

        switch ($symbol) {
            case '+':
                $this->result += $num;
                break;

            case '-':
                $this->result -= $num;
                break;
        }
    }

Añadir más funciones a la calculadora haría aumentar el switch y eso creo que no es una buena solución.

Casi cada vez que utilizamos un switch podemos mejorarlo utilizando polimorfismo. Es cierto que esta regla de cambiar switch por polimorfismo no puede usarse siempre, pero sería bueno tenerla siempre en mente.

Continúa leyendo “Mejorando con Mockery – Separando responsabilidades”