2011-03-10 3 views
5

Decir que tengo una clase y el método definido con la seudo código siguiente¿Hay alguna manera de verificar que los simulacros o los talones son válidos?

class Book 
    def quick_info 
    return title + " " + author 
    end 
end 

Si estoy escribiendo una prueba de unidad en alguna otra clase que utiliza esta clase Book que crearía un talón de el método llama al Book.quick_info.

Ahora me imagino que surgiría un problema si mi clase Book fuera a cambiar, por ejemplo, si el método quick_info se renombró a short_description. Mi prueba unitaria seguiría usando quick_info y parecería que mis pruebas están pasando bien cuando en realidad deberían estar fallando.

Me preguntaba si hay algo que pueda ejecutarse para verificar que los stubs/mocks en mi prueba en realidad estaban compuestos por las clases y los métodos correctos. Tal vez algo así podría ejecutarse en un servidor de integración continua solo para verificar que las cosas coincidan?

Hrmm .... y ahora se me acaba de ocurrir una idea. ¿Es posible crear un método simulado/troquelado que no exista? Si no, entonces toda esta pregunta es discutible.

EDIT:

simplemente he intentado esto a cabo utilizando rspec 2 y sé que puedo crear una instancia Book y crear un método denominado i_dont_exist y puedo llamarlo bien. Entonces mi pregunta sigue en pie. ¿Hay alguna forma de verificar que mis simulacros/talones coincidan con las clases/objetos que realmente existen?

Respuesta

4

Mocha tiene una opción para esto:

Mocha::Configuration.prevent(:stubbing_non_existent_method) 

A pesar de que se requiere para burlarse de un objeto existente. Si está creando un simulacro desde 'cero', no funcionará (ya que no tiene idea de qué métodos deberían estar allí).

En términos de mejores prácticas, en mi humilde opinión lo está mirando desde la dirección equivocada. También debe tener una prueba unitaria en la clase Libro, por lo que obtendrá fallas de prueba cuando cambie el nombre del método. Esa debería ser una señal lo suficientemente fuerte para 'grep' el código para ver si hay más llamadas a este método.

También (a menos que sea solo un ejemplo) ¿por qué querrías burlarte de todos modos? Es solo un dato: generalmente quiere burlarse de los servicios externos y trabajar con objetos de datos reales en sus pruebas.

+0

Como mencionaste, el problema es que los servicios externos suelen ser burlados (por ejemplo, un servicio web) en cuyo caso no tendré una prueba de unidad. Pero tal vez se supone que debe estar cubierto por una prueba de integración? En cuanto a 'Book' solo se utilizó para aclarar mi ejemplo ... pero creo que fue un mal ejemplo. – Fendo

Cuestiones relacionadas