2010-09-02 16 views
11

Estoy usando SenTest en XCode para mis pruebas unitarias. Debo ejecutar una tarea de línea de comandos para que mis pruebas unitarias sean probadas. Puedo hacer eso en el método + initialize de mi clase de prueba (subclase de SenTestCase, por supuesto).SenTestKit: ¿limpieza después de que se hayan ejecutado TODAS las pruebas?

Me gustaría terminar la tarea de línea de comandos cuando se realizan las pruebas. Como no hay un opuesto de + inicializar, estoy perplejo.

¿Hay alguna manera de subclase de una clase SenTest para hacer esto que estoy pasando por alto?

Respuesta

36

No ejecute la herramienta de línea de comandos en + inicializar. Eso es enviado por el tiempo de ejecución de Objective-C cuando se envía por primera vez a la clase cualquier mensaje.

En su lugar, ejecute la herramienta de línea de comandos en el método +setUp de su prueba. (Tenga en cuenta que en realidad quería decir +setUp y no -setUp;. Mucha gente parece ser un poco borrosa en la diferencia entre los métodos de clase e instancia)

En este caso, un clasesetUp método es invocado por OCUnit antes cualquier de pruebas en una subclase SenTestCase se ejecutan, y una clase métodotearDown es invocado por OCUnit después todos pruebas en una carrera ar SenTestCase subclase.

lo tanto, el flujo total de SenTestCase subclase particular es:

  • enviar +setUp a SomeTestCase
  • para cada test método de arranque en SomeTestCase (llámese test___)
    • crear una nueva instancia de SomeTestCase
    • envío -setUp a ella
    • enviar -test___ a ella
    • enviar -tearDown a ella
    • liberación que
  • enviar +tearDown a SomeTestCase

De esta manera si usted tiene algo que hay que hacer antes de que cualquiera de su -test métodos funcionan, o algo que hay que hacer después de que todos sus -test ejecutar métodos, hay un punto determinante en wh que puedes hacer que eso suceda (En lugar de confiar en la gestión de la memoria, que no es determinista de la misma manera, y puede no ser determinista en absoluto si está utilizando GC.)

+2

No había encontrado nada que hablara sobre los métodos de + setUp/+ desmontaje. Gracias por la iluminación – Mel

0

Debería mirar Google Toolbox for Mac o su derivada adicional GHUnit. Ambas (creo) proporcionan una configuración y desmantelamiento a nivel de clase al menos. Si realmente desea ejecutar una línea de comandos antes de ejecutar todas las pruebas y luego una segunda línea de comando (quizás para matar al primero) después de ejecutar las pruebas, modificaría la fase de compilación del script de shell que ejecuta las pruebas unitarias (el último paso en las fases de compilación de un objetivo de paquete UnitTest).

+4

No necesita ningún marco adicional para tener configuración y desmontaje a nivel de clase; estos son parte de OCUnit. –

Cuestiones relacionadas