I'm new to ocUnit and I'm attempting to compare 2 arrays with the STAssertTrue method and == for equality.
The test below simply asks the system under test (sut) for the array in return
- (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");
}
Then inside my production code I simply return the same array
- (NSArray *)parseAndReturn
{
NSArray* x = [[NSArray alloc] initWithObjects:@"1", @"2", @"3", @"4",nil];
return x;
}
Yet when the test runs I get a failure. How should I compare these objects to see if they are the same or not?
Thank you in advance
There's a macro STAssertEqualObjects
which uses -isEqual:
for object comparison. I think it's exactly what you need.
STAssertTrue
in your case compares object pointers and fails because result
and expected
are different objects (their pointers are different).
You probably want something like:
STAssertTrue([result isEqual: expected], @"This test failed");
This will go through the arrays and return false if each item does not return true from its isEqual implementations. If your array members are NSStrings as is indicated, you should be good to go.
As the other fellow said, in Objective-C, == implies pointer equality and not value equivalence.
What you are comparing is whether expected and result are pointing to the same array, which they obviously are not. Instead in order to compare the content you need to go through both the NSArrays and compare object by object using the object's compare function.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With