STAssertEqualObjects在Xcode中使用OCUnit不使用NSString

时间:2012-10-29 22:20:00

标签: ios xcode unit-testing ocunit

无法弄清楚这里发生了什么。 。 。

我有一个简单的单元测试,旨在测试解析器。测试用例如下所示:

[parser didStartElement:@"mobileresponse" attributes:[NSDictionary dictionaryWithObject:@"http://www.espn.com/" forKey:@"rooturl"]];
[parser didStartElement:@"content" attributes:[NSDictionary dictionaryWithObject:@"/soccer" forKey:@"mobileFriendlyUrl"]];
NSString *mobileFriendlyURL = [parser valueForKey:@"mobile_friendly_url"];
STAssertEqualObjects(@"http://www.espn.com/soccer", mobileFriendlyURL, @"url path should be appended to root url");

现在每次失败,但这是输出

'http://www.espn.com/soccer' should be equal to 'http://www.espn.com/soccer' url path should be appended to root url

我疯了还是那些完全相同?有没有人知道为什么会抛出错误?

2 个答案:

答案 0 :(得分:0)

只需将nsstring声明更改为

即可
[NSString stringWithFormat:@"%@",[parser valueForKey:@"mobile_friendly_url"]];

答案 1 :(得分:0)

最有可能的原因是[parser valueForKey:@"mobile_friendly_url"]没有返回NSString

考虑这个例子(错误就是要说明一点):

NSString *mobileFriendlyURL = [NSURL URLWithString:@"http://www.espn.com/soccer"];
STAssertEqualObjects(@"http://www.espn.com/soccer", mobileFriendlyURL, @"");

这将失败并显示与您相同的消息,因为您比较了两个不同的对象(即使您假设 mobileFriendlyURLNSString并声明其类型作为NSString)。最后,该消息只打印description的{​​{1}},这当然与您的字符串相同,从而使您更加困惑:)

测试这一理论的一种快速方法是做这样的事情:

NSURL

或者甚至更好地做类似的事情来查询类:

NSString *mobileFriendlyURL = [[NSURL URLWithString:@"http://www.espn.com/soccer"] description];
STAssertEqualObjects(@"http://www.espn.com/soccer", mobileFriendlyURL, @"");

我希望这是有道理的......