【问题标题】:isKindOfClass returning different values for Test CasesisKindOfClass 为测试用例返回不同的值
【发布时间】:2015-08-05 00:07:44
【问题描述】:

我有一个方法someMethod。该方法在某些时候具有以下 if-else 条件。

- (void) someMethod {
    // ... some more code ... 
    if ([userArray[0] isKindOfClass:[Me class]]) {
        // some code
    }
    else {
        // some other code
    }
}

现在,当我正常执行代码时,总是满足这个 if 条件。但是当我从我的一个测试用例中调用它时,else-part 会被执行。我以完全相同的方式调用此方法(它没有副作用等)。

当我在正常运行和测试运行中调试事物时。我看到了不同的东西。

在测试中运行时,userArray 有 1 个对象,(Me_Me_2 *)0x00007fa61d39dbf0。 并且在正常运行时,userArray 具有相同的对象,但有一个区别。上面写着(Me_Me_ *)0x00007fce71459ae0

当我打印NSStringFromClass([userArray[0] class]) 的值时,它们都打印“我”。

“我”是一个 NSManagedObject。

另一个有趣的事情是,如果我在调试器中添加一个表达式并对其求值,它的求值结果总是为真——([((NSObject*)userArray[0]) isKindOfClass:[Me class]]) 返回(bool)true。这太奇怪了!如果条件为真,为什么它会进入 else 块?

现在有一些问题-

  1. 这里发生了什么?在测试中运行时,Core Data 对象的处理方式是否不同?

  2. 为什么在测试时对象的类型为“Me_Me_2”,否则为“Me_Me_”?为什么不只是“我”?

【问题讨论】:

    标签: ios iphone unit-testing xctest xctestexpectation


    【解决方案1】:

    这听起来类似于以下问题:isKindOfClass doesn't work as expected

    简而言之,被比较的类是测试目标的目标成员吗?它应该只是应用程序的目标成员。

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 2018-02-27
      • 2014-01-18
      • 2021-05-06
      • 2021-02-11
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多