0

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

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

[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

我要疯了还是完全一样?有谁知道为什么这会引发错误?

4

2 回答 2

0

只需将 nsstring 声明更改为

[NSString stringWithFormat:@"%@",[parser valueForKey:@"mobile_friendly_url"]];
于 2012-10-29T22:35:01.693 回答
0

那么最有可能的原因是它[parser valueForKey:@"mobile_friendly_url"]不返回一个NSString.

考虑这个例子(错误是为了说明问题):

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

这将失败并显示与您相同的消息,因为您比较了 2 个不同的对象(即使您假设mobileFriendlyURL是 anNSString并将其类型声明为NSString)。最后,该消息仅打印当然与您的字符串相同的descriptionof the NSURL,从而使您更加困惑:)

测试该理论的一种快速方法是执行以下操作:

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

或者甚至更好地执行类似的操作以查询类:

NSLog(@"%@", [mobileFriendlyURL class]);

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

于 2012-10-29T22:37:22.847 回答