31

La pregunta breve es: ¿Cómo puedo hacer que las operaciones del archivo iPhone (objetivo-c) funcionen correctamente desde una línea de comandos? ¿Prueba de unidad?Línea de comandos del iPhone Pruebas unitarias (y E/S de archivos)

La pregunta larga, con explicación: Esto eventualmente se convertirá en una secuencia de comandos para realizar construcciones/pruebas automáticas para la construcción de mi iPhone, a través de una instancia de Hudson. Siguiendo el enlace de makdad en this ASÍ, la pregunta me ha permitido ejecutar las pruebas unitarias desde la línea de comando (semi) con éxito.

Sin embargo, una de mis pruebas falla. La prueba llamaría a una clase de servicio de almacenamiento en caché para guardar un archivo, luego intenta recuperarlo. Sin embargo, el archivo que aparece O/a no funcionar al ejecutar las pruebas desde la línea de comandos :(.

Para referencia, ejecutar las pruebas unidad a través de los resultados de Xcode GUI en ningún tipo de errores.

estoy usando NSFileHandle llamadas a métodos para obtener las manijas para la escritura. si vuelven a cero, el archivo se ha creado usando

[[NSFileManager defaultManager] createFileAtPath:filePath contents:nil attributes:nil]; 

pensé que podría tener que ver con los espacios en la ruta de directorio de memoria caché del simulador. estoy en el camino correcto ? si es así, ¿cómo puedo rectificar esto?

Tenga en cuenta también que el simulador debe ser NO ejecutándose para que esto funcione, el simulador se inicia mediante programación y no muestra una GUI. si se está ejecutando, la construcción de la línea de comando falla.

+2

¿Se ha creado el archivo? ¿Está arrojando un error? Generalmente, los espacios no deberían ser un problema en NSString, ya que no hay nada más que lo procese, se tomarán literalmente. Una cosa con la que teníamos que tener cuidado al ejecutar pruebas desde la línea de comandos era cualquier variable de entorno que fuera configurada por Xcode, pero no por nuestro script. – gaige

+0

Desafortunadamente no he tenido la oportunidad de investigar esto por un tiempo, habiendo pasado a otro proyecto y no recuerdo si el archivo se creó o no. Sin embargo, tiene razón, es posible que necesite establecer una variable de entorno para darle al simulador algo de espacio en disco para usar como 'Memoria interna'. si tengo la oportunidad lo probaré – Robotnik

+0

¿Falta algún directorio intermedio? –

Respuesta

3

Primero: 'el simulador debe ser no ya en ejecución para que esto funcione'
tengo mis pruebas se ejecutan en el terminal y no importa si el simulador está activado.

Tal vez algunos ajustes de compilación que debe observar son: TEST_HOST y BUNDLE_LOADER. Los dejo vacíos en mi xcodeproj.
Nota: Estoy usando Hudson también con informes de prueba y cobertura de código.

Segundo:
que han experimentado fallas en las pruebas de terminales y aplicaciones con las trayectorias de carga. Esto estaba relacionado con el modelo de datos centrales que se carga desde un recurso.
La solución consistió en cargar el archivo desde el URL en lugar de un camino:

[[NSBundle bundleForClass:[self class]] URLForResource:....]; 

No puedo garantizar esto se relaciona con el mismo problema que su encuentro con el NSFileManager, pero sólo puedo imaginar que NSBundle hace uso de la NSFileManager . (Así que esto puede estar relacionado)

Tercero:
no condicionan sus pruebas de E/S.
Creo que ese no es el propósito de una prueba unitaria. Tal prueba no puede basarse en un sistema de archivos, base de datos, conexión de red, etc.

Realice una clase de abstracción del sistema de archivos que simule mientras ejecuta sus pruebas.
De esta forma, su implementación solo se realiza en un lugar dependiendo del sistema de archivos real, que puede reemplazar durante la prueba.

Solo necesita una prueba para comprobar esa abstracción.

Resumen

  • El primer mejorará su configuración de prueba.
  • Se espera que el segundo resuelva su problema de prueba.
  • El tercero reducirá la ocurrencia del problema y mejorará su código.

Espero que haya sido útil.

+0

Finalmente he perseguido esto, y lo que terminamos haciendo fue exactamente su segundo punto. ¡Gracias! – Robotnik

+0

Me alegro de que hayamos reducido tu problema. Ayudaré a mucha gente, creo. –

Cuestiones relacionadas