objective-c xcode unit-testing ocunit xcode4.4

objective c - Algunas de mis pruebas de unidad no están terminando en XCode 4.4



objective-c unit-testing (7)

Acabo de tener este problema con XC4.5DP4.

Tuve una prueba que hace algo de trabajo en un bucle, y no hace nada más cuando se sale del bucle, y estaba recibiendo el error "no se terminó".

En un intento de probar que la prueba estaba terminando, agregué esto como la última línea:

NSLog(@"done");

No solo se imprime "hecho" en la salida, ahora Xcode dice que la prueba ha finalizado.

Parece ser una solución ... imagínate.

He visto personas publicando sobre esto aquí y en otros lugares, pero no he encontrado ninguna solución que funcione. Estoy usando XCode 4.4 y tengo un montón de pruebas unitarias configuradas. Los he ejecutado todos antes en este proyecto, así que sé que sí pasan / fallan cuando se supone que deben hacerlo si realmente se ejecutan.

Tengo alrededor de 15 suites de prueba, y cada una contiene 1-7 pruebas. En la mayoría de los intentos, todas las suites de prueba finalizaron (y se aprobaron) excepto 1 (FooTests). Da la advertencia:

FooTests did not finish testFoo did not finish

XCode informará que las pruebas fueron exitosas, independientemente de lo que suceda en las pruebas no finalizadas. Otra cosa a tener en cuenta, a veces es una prueba diferente que no terminará y, a veces, varias suites no finalizarán. No he notado un caso donde todas las pruebas terminen, pero a juzgar por este comportamiento aparentemente aleatorio, creo que es posible.

Entonces, ¿es esto un error en XCode? No puedo pensar en ninguna otra razón por la que las pruebas no terminen al azar y luego causan que XCode informe que todo fue exitoso. ¿Hay alguna solución?


El problema parece que sus pruebas terminan demasiado rápido para que Xcode reciba y analice los mensajes de registro que indican un error o éxito. Dormir durante 1 segundo en el último caso de prueba funcionó de manera confiable para mí, donde 0.0 no lo hizo. Para ver qué caso de prueba es el último caso de prueba, verifique la acción de prueba en el cuadro de diálogo Esquema.

Creé un caso de prueba WorkaroundForTestsFinishingTooFast separado, con un solo método:

- (void)testThatMakesSureWeDontFinishTooFast { [NSThread sleepForTimeInterval:1.0]; }

El problema es que a medida que agregue más casos de prueba, tendrá que asegurarse de que esta prueba sea el último método ejecutado. Eso significa que no se permite eliminar y agregar esta clase de la acción de Prueba, ya que no se permite reordenar los casos de prueba. Por otro lado, solo está retrasando todo su paquete de prueba en 1 segundo.


Estoy en XCode 4.5.2. Para la prueba de la unidad de la aplicación, si sus suites de pruebas terminan tan rápido que la aplicación principal no se carga correctamente antes de eso, recibirá la advertencia. Simplemente puede evitar el problema agregando un sueño al final de su prueba, como sigue. No sucede para la prueba de la unidad lógica.

[NSThread sleepForTimeInterval:1.0];


Estoy usando XCode46-DP3 y acabo de resolver este problema en mis pruebas. Tengo varias pruebas que inician un servidor web y luego ejecutan una llamada http; Al final de la prueba se detiene el servidor web. En la semana pasada, estas pruebas comenzaron a tener la advertencia "no terminó". Para mí ha sido suficiente para agregar el siguiente sueño al final de estas pruebas (precisamente lo he agregado en el tearDown):

- (void)tearDown { [self.httpServer stop]; [NSThread sleepForTimeInterval:1.0]; self.httpServer = nil; self.urlComposer = nil; }


Para mí, la solución fue reducir la salida de registro de las partes de la aplicación que las pruebas estaban probando. Creo que xcode no pudo analizar la salida de las pruebas a tiempo debido a la otra salida que tuve en toda la aplicación.


Tenía las mismas advertencias en el Log Navigator. Lo arreglé para mí.

En mi proyecto tengo 2 Esquemas, uno para ejecutar el proyecto y otro para las pruebas unitarias.

  1. Ir al producto -> Editar esquema ...
  2. Seleccione el esquema UnitTest en el selector de esquema
  3. Seleccione el icono "Test" a la izquierda
  4. Cambie el depurador de LLDB a GDB y presione OK
  5. Las pruebas deben terminar ahora. (Para mi funciono bien)

Tuve el mismo problema con XCode 4.6, la razón de ello, en mi caso, era la inconsistencia entre el esquema y las pruebas de unidad reales en los trajes de prueba. En el esquema hice revisar algunos trajes, pero en su archivo .m se comentaron algunas pruebas unitarias.

Para resolver el problema: elimine el comentario de la prueba o deseleccione el archivo / demanda en el esquema y todo se volverá verde nuevamente :)

Para las personas como yo que olvidaron cómo llegar al esquema, estos son los pasos necesarios:

  1. haga clic derecho en el nombre del proyecto en la sección de esquema (a la derecha del botón de parada)
  2. elegir editar esquema
  3. Elija la prueba de depuración
  4. haga clic en el triángulo junto al proyecto de prueba de unidad y junto a cada archivo que tenga una casilla de verificación
  5. desmarque los archivos que puso la prueba de unidad en los comentarios

espero que esto ayude