2011-01-30 19 views
6

Soy nuevo en ocUnit y estoy tratando de comparar 2 arrays con el método STAssertTrue y == para la igualdad.Haciendo una comparación de NSArray en ocUnit

La prueba más adelante, simplemente le pide al sistema bajo prueba (SUT) para la matriz a cambio

- (void) testParse { 
    SomeClassForTesting* sut = [[SomeClassForTesting alloc] init]; 
    NSArray* result = [sut parseAndReturn]; 

    NSArray* expected = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 

    STAssertTrue(result == expected, @"This test failed"); 
} 

A continuación, dentro de mi código de producción que devuelva el mismo array

- (NSArray *)parseAndReturn 
{ 
    NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil]; 
    return x; 
} 

Sin embargo, cuando la prueba corre, obtengo un fracaso. ¿Cómo debo comparar estos objetos para ver si son iguales o no?

gracias de antemano

Respuesta

2

es probable que desee algo como:

STAssertTrue([result isEqual: expected], @"This test failed"); 

Esto pasará a través de las matrices y devolver false si cada elemento no devuelve verdadero de sus implementaciones IsEqual. Si los miembros de su matriz son NSStrings como se indica, debería estar listo para continuar.

Como dijo el otro compañero, en Objective-C, == implica igualdad de puntero y no equivalencia de valor.

1

Lo que se está comparando es si espera y resultado están apuntando a la misma matriz, lo que es evidente que no lo son. En su lugar, para comparar el contenido, debe pasar por los NSArrays y comparar el objeto por objeto utilizando la función de comparación del objeto.

3

Hay una macro STAssertEqualObjects que usa -isEqual: para la comparación de objetos. Creo que es exactamente lo que necesitas.

STAssertTrue en su caso compara los punteros a objetos y falla porque result y expectedson diferentes objetos (sus punteros son diferentes).

+0

En mi opinión, este es un mejor enfoque que la respuesta aceptada. Si las matrices difieren, los contenidos de ambos se imprimirán cuando la afirmación falle, lo que generalmente es útil. –