我遇到了一个奇怪的情况,单元测试的执行与一段代码的正常执行不同。
特别是,我正在使用一个名为 JSONModel 的库,当我尝试从 JSON 字符串反序列化对象时,当我逐步执行测试用例时,特别是一行会导致问题:
if ( [[property.type class] isSubclassOfClass:[JSONModel class]] ) ...
如果我在此行之前(或之后)放置断点并执行:
expr [[property.type class] isSubclassOfClass:[JSONModel class]]
...在调试器中,它打印\x01
为值(即真),但是当我实际执行指令指针时,它的行为就好像它是假的,而是进入 else 块。同样,在调试器中输入表达式再次显示它为真,即使仍然如此。
我很好奇是否有人以前见过类似的行为并对可能出现的问题有任何建议。我很确定我没有包含任何不同的定义,除非 Xcode 有不同的内部可可类实现进行测试。
更新:这里有一些更奇怪的证据:我添加了一些NSLog
语句来了解执行是如何看待事物的。如果我登录property.type.superclass
,我会JSONModel
回来(如预期的那样);但是,如果我登录property.type.superclass == [JSONModel class]
,我会得到false
!
对我来说,这表明单元测试执行所看到的 JSONModel 在某种程度上是我在运行时看到的不同的 JSONModel 类(以及它应该看到的)。但是,这是如何发生的,我无法弄清楚。
这可能是由前向类声明或类似的东西引起的吗?