¿Cuál es la mejor manera de probar el código Objective-C?


330

¿Qué marcos existen para la prueba unitaria del código Objective-C? Me gustaría un marco que se integre bien con Apple Xcode.


Que yo sepa, algunas de las respuestas aquí están desactualizadas. Apple ahora tiene XCTest, que lo ayuda a abordar este problema. Creo que la mayoría de las respuestas deben actualizarse.
Miel

Respuestas:


317

Xcode incluye XCTest, que es similar a OCUnit , un marco de prueba de unidad Objective-C, y tiene soporte completo para ejecutar pruebas de unidad basadas en XCTest como parte del proceso de construcción de su proyecto. El soporte de pruebas unitarias de Xcode se describe en la Descripción general de Xcode: Uso de pruebas unitarias .

En los 2 días de Xcode, escribí una serie de publicaciones en el blog sobre cómo realizar algunas tareas comunes con las pruebas unitarias de Xcode:

A pesar de usar OCUnit en lugar de XCTest, los conceptos son básicamente los mismos.

Finalmente, también escribí algunas publicaciones sobre cómo escribir pruebas para las interfaces de usuario de Cocoa; la forma en que está estructurado Cocoa lo hace relativamente sencillo, porque no tiene que girar un bucle de eventos ni nada de eso en la mayoría de los casos.

Esto hace posible el desarrollo basado en pruebas no solo para el código de nivel de modelo, sino también para el código de nivel de controlador e incluso de nivel de vista.


55
Peter Hosey también hizo una buena presentación sobre las pruebas de la Unidad de Cacao en la reunión de Cocoaheads de Lake Forest, California, en diciembre. Aquí hay un video: vimeo.com/2725498
Grant Limberg el

1
Cuando comencé con iOS hace aproximadamente un año, descubrí que OCUnit tenía (para mí) un serio inconveniente: no podía ejecutarlo en el simulador o dispositivo. Puede haber cambiado desde entonces, no lo he comprobado, pero he estado usando GHUnit simplemente por esa razón.
drekka

1
¿Hay algún video oficial de Apple Developer sobre este tema? Pasé por WWDC 2011 y 2010 pero no pude encontrar ninguno ... extraño ya que las pruebas son importantes, ¿sí?
Robert

44
El enlace de Xcode Unit Testing Guide se ha movido a Xcode Unit Testing Guide
Steven Green

55
Xcode 5 ahora tiene XCTest ¿todavía incluye OCUnit? ¿Actualizará su respuesta con información para XCode 5.
BrightIntelDusk

50

Echa un vistazo a GHUnit por Gabriel Handford:

"Los objetivos de GHUnit son:

Ejecuta pruebas unitarias dentro de XCode, lo que le permite utilizar completamente el depurador XCode. Una GUI simple para ayudarlo a visualizar sus pruebas. Mostrar rastros de la pila. Ser instalable como un marco (para aplicaciones de Cocoa) con una configuración de destino simple (o no); o fácil de empaquetar en su proyecto de iPhone ".


55
+1 para GHUnit! Soy nuevo en el desarrollo de iPhone y honestamente puedo decir que tenía GHUnit funcionando sin problemas (las instrucciones son perfectas) en comparación con la pesadilla absoluta de OCUnit y la leve migraña de GTM. ¡GHUnit gana por facilidad de uso y facilidad!
Tim Reddy

3
Tenga en cuenta que esta respuesta y los comentarios adjuntos se escribieron hace algún tiempo. Xcode tiene mucho mejor soporte para pruebas basadas en OCUnit ahora, lo que facilita la configuración de pruebas y su ejecución en el depurador.
Kristopher Johnson

1
Este proyecto ya ha quedado en desuso.
BigHeadCreations



12

Tenga en cuenta que el proyecto Google Toolbox para Mac (GTM) simplemente extiende / aumenta el marco SenTestingKit de Apple (que se basa en OCUnit). Como dicen en el sitio del proyecto:

GTM tiene varias mejoras en el SenTestingKit estándar que le permite realizar pruebas de unidad de IU, pruebas de unidad de encuadernación automatizadas, seguimiento de registros y pruebas de unidad en el iPhone, así como herramientas para realizar pruebas estáticas y dinámicas de su código.

Tenga en cuenta el siguiente comentario sobre las pruebas de interfaz de usuario:

GTM tiene un amplio soporte para pruebas de unidad de interfaz de usuario. Es compatible con la prueba de imagen y / o estado interno de casi todos los objetos de interfaz de usuario estándar de Cocoa / UIKit, y le facilita extender este soporte a sus propios objetos de interfaz de usuario.

Consulte la página " Verificación del código y prueba de la unidad " para obtener instrucciones sobre cómo usarlo.


12

Llegué a la conclusión de que GHUnit es el marco de prueba más avanzado para Objective-C. He hecho un resumen de los marcos de prueba en mi blog. Es el más flexible en términos de implementación (iphone, simulador o mac os nativo) y capacidades de afirmación. Debido a que se basa en GTM, hereda todas las ventajas de GTM sobre SenTestingKit, pero también agrega mucho más. Otra ventaja es que se mantiene de manera muy activa.

He realizado un esfuerzo para integrar OCMock en GHUnit, ¡funciona muy bien! Puedes obtener el código en github .


12

Me doy cuenta de que esta es una vieja pregunta, pero si prefiere las pruebas de estilo BDD (rspec, Jasmine, etc.) sobre las pruebas de estilo xUnit (Test :: Unit, JSUnit, JUnit, etc.), entonces puede considerar revisar Cedar . Cedar lleva las pruebas de estilo BDD a Objective-C, ahora que el lenguaje admite cierres.

Estamos felices de usar Cedar para nuestros proyectos de iOS en Pivotal Labs , y estamos trabajando activamente para mejorarlo. Cualquier comentario o sugerencia es bienvenida en cedar-discuss@googlegroups.com


10

También recomendaría usar herramientas de cobertura para ver qué parte del código está cubierta con pruebas unitarias y cuáles no. La cobertura básica de línea y código de sucursal se puede generar con la herramienta GCOV . Si desea generar buenos informes de cobertura HTML, hay LCOV y ZCOV que hacen exactamente eso.









3

Specta es un marco moderno TDD (Test Driven Development) / BDD (Behavior Driven Development) que se ejecuta sobre XCTest. Admite pruebas unitarias para proyectos de iOS y Mac OS X.


0

Espero que pueda usar 'SenTestKit', desde el cual puede probar todos y cada uno de los métodos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.