¿Cómo compartir código entre varios casos de prueba de OCUnit?

¿Hay alguna forma de compartir código entre varios casos de prueba de OCUnit? Tal vez me estoy perdiendo algo obvio, pero no he sido capaz de hacerlo...

He intentado poner el código común en otra clase, pero parece que solo puede usar macros STAssertxxx dentro de los métodos de instancia de las clases que heredan de SenTestCase. Teniendo esto en cuenta, puse este código común en un singleton heredado de SentTestCase sin métodos de prueba, pero esto parece romper algunas suposiciones internas de OCUnit, ya que no obtengo ningún error de las pruebas fallidas en el código compartido.

Mi código actual (no funciona) es así:

@interface TestHelper : SenTestCase
+ (TestHelper *)sharedHelper;
- (void)assertSomething:(id)object;
@end

@implementation TestHelper
+ (TestHelper *)sharedHelper
{
    // Typical singleton magic
}

- (void)assertSomething:(id)object
{
    STAssertWhateverOnObject(object, ...);
}
@end



@interface RealTestCase : SenTestCase
- (void)testWhatever;
- (void)testAnotherThing;
@end

@implementation RealTestCase
- (void)testWhatever
{
    [[TestHelper sharedHelper] assertSomething:someObject];
    STAssertOtherThings(someObject, ...);
}

- (void)testAnotherThing
{
    [[TestHelper sharedHelper] assertSomething:someSimilarObject];
    STAssertSomeOtherThings(someSimilarObject, ...);
}
@end

Tenga en cuenta que este es un ejemplo simple. En este caso podría poner todo el código en la clase RealTestCase, pero me gustaría una solución genérica para compartir código entre varios casos de prueba, no solo entre métodos en un mismo caso de prueba.

Por cierto, tengo un problema similar al usar Kiwi.

preguntado el 12 de junio de 12 a las 10:06

2 Respuestas

Mi forma preferida es usar funciones/métodos para generar datos para probar (por ejemplo, devolver BOOL condición), no haciendo las pruebas reales.

En algunos casos, utilicé funciones de macro: se desenvuelve directamente en su caso de prueba y no tiene ninguna limitación.

Respondido el 13 de junio de 12 a las 23:06

Creo que tus opciones son:

  • Utilice funciones auxiliares independientes, no una clase auxiliar. O,
  • Use un mecanismo de aserción diferente como OCHamcrest eso no lo restringe a las subclases SenTestCase.

Usted puede escriba macros de aserción personalizadas similares a las de ST, pero es una molestia (y parte de la razón por la que escribí OCHamcrest en su lugar).

Respondido el 14 de junio de 12 a las 17:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.