Pregunta

A riesgo de ser flameado ... ¿qué ventajas tiene hacer cumplir las llamadas a métodos en lugar de las funciones tienen en un contexto en el contexto está implícito.

Teniendo en cuenta que la sintaxis de PHP es tan feo para llamar métodos ¿por qué los creadores de PHPUnit han impuesto su uso?

Si el marco se había puesto un objeto global "currentTestCase" y luego transparente asociado fallado afirma con objeto de que podríamos estar escribiendo:

assertEquals("blah", $text);

a diferencia de su equivalente, pero detallado:

$this->assertEquals("blah", $text);

¿Qué es exactamente lo que obtenemos mediante el uso de OO en este contexto.

Por favor ilumíneme.

¿Fue útil?

Solución

Debido a PHPUnit se deriva de xUnit y así es como xUnit lo hace.

¿Por qué xUnit hacerlo de esa manera? Me alegro de que hayas preguntado. La razón original, como señala Robert, es que xUnit proviene de Smalltalk y fue popularizado por JUnit en Java. Ambos son OO o nada idiomas por lo que no tenían otra opción.

No

Esto es para decir que no haya otras ventajas. pruebas OO pueden ser heredados. Esto significa que si usted quiere probar una subclase puede ejecutar pruebas de todos los padres y simplemente reemplazar el puñado de métodos de ensayo para los comportamientos que ha cambiado. Esto le da una excelente cobertura de las subclases sin tener que duplicar el código de prueba.

Es fácil de agregar y reemplazar los métodos aserción en PHPUnit. Sólo PHPUnit_Framework_TestCase subclase, escribir sus propios métodos assert y tienen sus clases de prueba heredan de su nueva subclase. También puede escribir setup y teardown métodos predeterminados.

Por último, se garantiza que los métodos del marco de pruebas no van a entrar en conflicto con lo que se está probando. Si el marco de pruebas simplemente vierten sus funciones en la prueba y que quería probar algo que tenía un método setup ... así que estás en problemas.

Dicho esto, escucho su dolor. Un marco de pruebas grande puede ser molesto y engorroso y quebradizo. Perl no utiliza un estilo xUnit, utiliza un estilo de procedimientos con los nombres de funciones de prueba corta. Ver Test :: Más para un ejemplo. Detrás de las escenas que hace exactamente lo que usted sugiere, no hay una prueba objeto de instancia Singleton, que utilizan todas las funciones. Hay también un híbrido funciones de aserción de procedimiento con módulo de métodos de ensayo OO llamada Test :: Clase cuales Cómo lo mejor de ambos mundos.

  

Teniendo en cuenta que la sintaxis de PHP es tan feo para llamar métodos

supongo que no le gusta el ->. Le sugiero que aprender a vivir con ella. OO PHP es mucho mejor que la alternativa.

Otros consejos

Una buena razón es que assertXXX como un nombre de método tiene un alto riesgo para la denominación choque.

Otra es que se deriva de la xUnit familia, que por lo general se ocupa de lenguajes orientados a objetos - Smalltalk inicialmente. Esto hace que sea más fácil relaciona a sí mismo a sus "hermanos" de, por ejemplo, Java y Ruby.

No es una respuesta directa, pero a partir de PHPUnit 3.5, usted no tiene que escribir $this-> más. PHPUnit 3.5 añade una biblioteca de funciones para las aseveraciones, que tiene que incluir

require_once 'PHPUnit/Framework/Assert/Functions.php';

A continuación, puede hacer

assertEquals('foo', $bar);

Vea entrada del blog de Sebastian Bergmann al respecto

Tener los casos de prueba en la clase-métodos ahorra trabajo para PHPUnit. Debido a la falta de PHPUnit inteligencia integrada no podría encontrar o manejar las funciones de prueba puros. Sólo tener que reconocer la -> aserción * () mensajes -en un simple booleano cadena- nuevo ahorra lógica de procesamiento (por PHPUnit, no es el caso del autor de prueba). Es toda la sal sintáctica que ahorra gastos generales desde el punto de vista PHPUnit / SimpleTest.

No sería un problema técnico para capturar el error / mensajes de advertencia, excepciones o reconocer los PHP aserción nativa () comunicado. No se hace porque un API parece más difícil enterprisey.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top