PDA

View Full Version : [Resolved] Need Help Figuring out Test Driven Development on a NSMutableString Category...




ArtOfWarfare
Apr 7, 2013, 11:15 AM
I've been through about two dozen interviews so far this year (just got my first offer, haven't decided whether to accept it or not yet,) and I've noticed most of them want me to have experience in test driven development. So I decided I'd give it a shot with my next personal project, but I'm having issues with my very first project.

I made a category for NSMutableString which contains a method for counting and removing occurrences of a string. Here's the header:

#import <Foundation/Foundation.h>

@interface NSMutableString (YRUtilities)
- (NSUInteger)countAndRemoveOccurrencesOfString:(NSString*)string;
- (NSUInteger)countAndRemoveOccurrencesOfString:(NSString*)string inRange:(NSRange)range;
@end

Here's the implementation:

#import "NSMutableString+YRUtilities.h"

@implementation NSMutableString (YRUtilities)
- (NSUInteger)countAndRemoveOccurrencesOfString:(NSString*)string {
return [self countAndRemoveOccurrencesOfString:string inRange:NSMakeRange(0, self.length)];
}

- (NSUInteger)countAndRemoveOccurrencesOfString:(NSString*)string inRange:(NSRange)range {
return [self replaceOccurrencesOfString:string withString:@"" options:0 range:range];
}
@end

Those files are named NSMutableString+YRUtilities.h/m

Here's the test I wrote for them:

#import "CalcyrTests.h"
#import "NSMutableString+YRUtilities.h"

@implementation CalcyrTests

- (void)setUp
{
[super setUp];

// Set-up code here.
}

- (void)tearDown
{
// Tear-down code here.

[super tearDown];
}

- (void)testCountAndRemoveOccurrencesOfString
{
NSMutableString * string = [@"DeleteDelete Delete DelDeleteete" mutableCopy];
STAssertEquals(4, [string countAndRemoveOccurrencesOfString:@"Delete"], @"countAndRemoveOccurrencesOfString returned %@", string);
STAssertEqualObjects(string, @" Delete", @"countAndRemoveOccurrencesOfString returned %@", string);
}

@end

But I'm getting issues with both parts of that single test.

The first line says "Type mismatch -- countAndRemoveOccurrencesOfString returned DeleteDelete Delete DelDeleteete"

And "'DeleteDelete DelDeleteete' should be equal to ' Delete' countandRemoveOccurrencesOfString returned DeleteDelete Delete DelDeleteete"

I'm confused - what happened? Are my tests failing because I don't know how to write them properly or are they failing because the method I wrote doesn't work?

Edit: Solved. The type mismatch was because I had an integer on the left side and a NSUInteger being returned. All I had to do was add a cast to the 4 to have it be an NSUInteger.