He buscado pero no puedo encontrar lo que estoy buscando y el manual no es de mucha ayuda a este respecto. Soy bastante nuevo en las pruebas unitarias, así que no estoy seguro de si estoy en el camino correcto. De todos modos, a la pregunta. Tengo una clase:Creando objetos simulados en la unidad PHP
<?php
class testClass {
public function doSomething($array_of_stuff) {
return AnotherClass::returnRandomElement($array_of_stuff);
}
}
?>
Ahora, claro que quieren que el AnotherClass::returnRandomElement($array_of_stuff);
para devolver la misma cosa cada vez. Mi pregunta es, en mi prueba de unidad, ¿cómo puedo simular este objeto?
He intentado agregar el AnotherClass
a la parte superior del archivo de prueba, pero cuando deseo probar AnotherClass
obtengo el error "No se puede redeclarar la clase".
Creo que entiendo las clases de fábrica, pero no estoy seguro de cómo aplicar eso en esta instancia. ¿Tendría que escribir una clase AnotherClass completamente separada que contuviera datos de prueba y luego usar la clase Factory para cargarla en lugar de la AnotherClass real? O está utilizando el patrón Factory simplemente como un arenque rojo.
yo probamos este:
$RedirectUtils_stub = $this->getMockForAbstractClass('RedirectUtils');
$o1 = new stdClass();
$o1->id = 2;
$o1->test_id = 2;
$o1->weight = 60;
$o1->data = "http://www.google.com/?ffdfd=fdfdfdfd?route=1";
$RedirectUtils_stub->expects($this->any())
->method('chooseRandomRoot')
->will($this->returnValue($o1));
$RedirectUtils_stub->expects($this->any())
->method('decodeQueryString')
->will($this->returnValue(array()));
en la función setup(), pero estos recibos son ignorados y no puedo averiguar si se trata de algo que estoy haciendo mal, o la forma en que estoy accediendo los métodos AnotherClass
.
¡Ayuda! Esto me está volviendo loco.
Brillante, gracias por la respuesta. Una pregunta sin embargo; entonces, tengo una clase de mi Factory, que crea todas las instancias para mí. Esta es la clase que entra en producción. ¿Agrego el objeto de simulacro a esta clase, o simplemente dejo la producción principal de Factory Class y luego agrego una nueva clase de fábrica para los unittest? – Mike
Eso es realy depende de usted. Puede hacer una nueva clase de fábrica para probar, o puede asegurarse de haber limpiado su clase de fábrica después de probarla. –