无法弄清楚这里发生了什么。 。 。
我有一个简单的单元测试,旨在测试解析器。测试用例如下所示:
[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
我疯了还是那些完全相同?有没有人知道为什么会抛出错误?
答案 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, @"");
这将失败并显示与您相同的消息,因为您比较了两个不同的对象(即使您假设 mobileFriendlyURL
是NSString
并声明其类型作为NSString
)。最后,该消息只打印description
的{{1}},这当然与您的字符串相同,从而使您更加困惑:)
测试这一理论的一种快速方法是做这样的事情:
NSURL
或者甚至更好地做类似的事情来查询类:
NSString *mobileFriendlyURL = [[NSURL URLWithString:@"http://www.espn.com/soccer"] description];
STAssertEqualObjects(@"http://www.espn.com/soccer", mobileFriendlyURL, @"");
我希望这是有道理的......