Unit testing STAssertEquals将相等字符串报告为不同字符串
我试图为一个库编写一个单元测试。库中的方法返回字符串,我希望确保它返回正确的字符串。但SenTestKit中的statsertequals宏将其视为不同的值,尽管它是相同的 您可以看到描述部分清楚地显示了两个字符串值是相同的,但这个宏表示它们的值是不同的。当我从方法返回静态字符串时(就像返回Unit testing STAssertEquals将相等字符串报告为不同字符串,unit-testing,sentestingkit,Unit Testing,Sentestingkit,我试图为一个库编写一个单元测试。库中的方法返回字符串,我希望确保它返回正确的字符串。但SenTestKit中的statsertequals宏将其视为不同的值,尽管它是相同的 您可以看到描述部分清楚地显示了两个字符串值是相同的,但这个宏表示它们的值是不同的。当我从方法返回静态字符串时(就像返回@“op_user”),它通过了测试用例。有人知道是什么原因导致相同字符串值的测试失败吗 我想你应该使用而不是。前者用于Objective-C实例,后者用于基本类型 从: STAssertEqualObjec
@“op_user”
),它通过了测试用例。有人知道是什么原因导致相同字符串值的测试失败吗 我想你应该使用而不是。前者用于Objective-C实例,后者用于基本类型
从:
STAssertEqualObjects
当两个对象不同时,测试用例失败
斯塔塞特奎尔斯
当两个值不同时,测试用例失败
如果将Objective-C对象与statsertequals()进行比较,则只是比较它们的指针值。它们可以指向包含相同字符串的两个不同字符串对象。即使它们的指针值不同,您也希望它们进行相等的比较
要比较实际的字符串内容,您需要使用这个方法,这正是StasserteQualobObjects()所做的。我认为您应该使用而不是。前者用于Objective-C实例,后者用于基本类型
从:
STAssertEqualObjects
当两个对象不同时,测试用例失败
斯塔塞特奎尔斯
当两个值不同时,测试用例失败
如果将Objective-C对象与statsertequals()进行比较,则只是比较它们的指针值。它们可以指向包含相同字符串的两个不同字符串对象。即使它们的指针值不同,您也希望它们进行相等的比较
要比较实际的字符串内容,您应该使用这个方法,这正是StasserteQualobObjects()所做的。这不是一个完全正确的答案(因为Marc已经正确地回答了),但作为一般规则,永远不要使用STAssertEquals
它使用了一种可疑的方法,首先检查参数的类型是否相等,使用@encode
确定类型,然后基本上执行memcmp。因此,变量定义如下
int i = 1;
unsigned int ui = 1;
assert(i == ui);
STAssertEquals(i, ui, @"");
将让statsertequals
失败-即使值相等
当
signed char sc = 1;
char c = 1;
STAssertEquals(sc, c, @"");
猜怎么着?(提示:类型不相等!) 。。。将成功,因为
@encode
无法区分无符号字符
和有符号字符
,但它们是不同的类型
其他问题是结构中的填充,其中memcmp
可能返回非零,但结构值实际上比较相等
因此,最好不要使用statsertequals
,以及采用同样荒谬方法的继任者xctasertequal
。这不是一个很好的答案(因为Marc已经正确地回答了),但作为一般规则,永远不要使用statsertequals
它使用了一种可疑的方法,首先检查参数的类型是否相等,使用@encode
确定类型,然后基本上执行memcmp。因此,变量定义如下
int i = 1;
unsigned int ui = 1;
assert(i == ui);
STAssertEquals(i, ui, @"");
将让statsertequals
失败-即使值相等
当
signed char sc = 1;
char c = 1;
STAssertEquals(sc, c, @"");
猜怎么着?(提示:类型不相等!) 。。。将成功,因为
@encode
无法区分无符号字符
和有符号字符
,但它们是不同的类型
其他问题是结构中的填充,其中memcmp
可能返回非零,但结构值实际上比较相等
所以最好不要使用
statsertequals
,也不要使用它的继承者xctasertequal
,因为它采用了同样荒谬的方法。谢谢,我的想法正好相反,statsertequalobjects比较的是对象本身而不是内容。感谢感谢,我的想法和STAssertEqualObjects比较对象本身而不是内容的方式相反。谢谢你。我还查看了宏定义,想知道@encode与它有什么关系。@encode
编译器指令为给定类型返回一个唯一的字符串表示形式,它可以是标量或结构(除了有符号字符
,它返回与字符
相同的编码)。更多关于这里:。在我看来,不适合实现通用比较算法。C++模板可能是所有标量类型(不是结构,而不是C字符串)的选项。好点。我还查看了宏定义,想知道@encode与它有什么关系。@encode
编译器指令为给定类型返回一个唯一的字符串表示形式,它可以是标量或结构(除了有符号字符
,它返回与字符
相同的编码)。更多关于这里:。在我看来,不适合实现通用比较算法。C++模板可能是所有标量类型(不是结构,而不是C字符串)的选项。