2011-01-30 14 views
6

Sono nuovo in ocUnit e sto tentando di confrontare 2 array con il metodo STAssertTrue e == per l'uguaglianza.Fare un confronto di NSArray in ocUnit

Il test di seguito semplicemente chiede al sistema in prova (SUT) per la matrice in 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"); 
} 

Poi nel mio codice di produzione semplicemente restituiscono lo stesso array

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

Tuttavia quando il test corre ho un fallimento. Come dovrei confrontare questi oggetti per vedere se sono uguali o no?

Grazie in anticipo

risposta

2

probabilmente si desidera qualcosa di simile:

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

Questo passerà attraverso gli array e restituire false se ogni oggetto non restituisce vero dalle sue implementazioni IsEqual. Se i membri dell'array sono NSStrings come indicato, dovresti essere pronto.

Come ha detto l'altro, in Objective-C, == implica l'uguaglianza del puntatore e non l'equivalenza del valore.

1

Cosa si sta confrontando è se previsto e risultato puntano allo stesso array, che ovviamente non lo sono. Invece per confrontare il contenuto è necessario passare attraverso entrambi gli NSArrays e confrontare oggetto per oggetto usando la funzione di confronto dell'oggetto.

3

C'è una macro STAssertEqualObjects che utilizza -isEqual: per il confronto degli oggetti. Penso che sia esattamente quello di cui hai bisogno.

STAssertTrue nel tuo caso confronta puntatori di oggetto e non riesce a causa result e expected sono diversi oggetti (i puntatori sono diversi).

+0

A mio parere questo è un approccio migliore rispetto alla risposta accettata. Se gli array differiscono, il contenuto di entrambi verrà stampato quando l'asserimento fallisce, il che è di solito utile. –