gpt4 book ai didi

objective-c - OCUnit 测试在未测试的类中给出错误

转载 作者:行者123 更新时间:2023-12-04 06:31:44 26 4
gpt4 key购买 nike

我编写了一个 OCUnit 测试,它在 Xcode 3.2 中运行良好,现在我在 Xcode 4 中遇到了问题。它测试了一个静态函数 X在类 A ,它不调用任何类或函数(库函数之外)。唯一需要调用的其他代码是静态构造函数,它初始化两个静态变量,但同样,这些是不调用任何其他类或类 A 的函数的硬编码值(数组)。 .

然而,为了解决 ,我必须为它导入的所有类以及它们导入的类包含 .m、.mm 和 .c 文件。 _OBJC_CLASS_$_ClassB",引用自: 错误。我不记得必须在 Xcode 3 中执行任何操作,但是很好,没问题,我可以编译它。现在,我收到源自类的错误B+[B initialize]

为什么在未以任何方式引用的类上调用静态构造函数?我该如何解决这个问题,理想情况下不改变我的类(class)来适应测试?

更新

为了进一步弄清楚发生了什么,我注释掉了我所有的测试用例和 #import "A.h"看看会发生什么。我添加了一个简单的单元测试:

- (void) testSomething {
STAssertTrue(NO, @"did it work?");
}

尽管如此,我的 +[B initialize]被调用并失败。似乎 OCUnit 正在遍历我所有的类(class),以及他们的 +initialize方法在这个过程中被调用。这对我来说毫无意义 - 如何禁用此行为?

这是调用我自己的代码之前的堆栈跟踪,以防万一:
#7  _class_initialize ()
#8 prepareForMethodLookup ()
#9 lookUpMethod ()
#10 objc_msgSend ()
#11 +[NSObject(SenTestRuntimeUtilities) senIsASuperclassOfClass:] ()
#12 +[NSObject(SenTestRuntimeUtilities) senAllSubclasses] ()
#13 +[SenTestSuite updateCache] ()
#14 +[SenTestSuite suiteForBundleCache] ()
#15 +[SenTestSuite testSuiteForBundlePath:] ()
#16 +[SenTestProbe specifiedTestSuite] ()
#17 +[SenTestProbe runTests:] ()
#18 <????> ()
#19 <????> ()
#20 <????> ()
#21 <????> ()

最佳答案

我在 xcode 4 和我的单元测试套件中也遇到了很多问题。

我必须查看您的消息来源才能知道您的情况发生了什么,但是 OCUnit 通过对类的反射做了很多事情。这就是运行以“test”开头的方法的方法。所以它在检查你的类,导致它们的类初始化器被触发是有道理的。

我知道这可能不是您正在寻找的答案,但是如果 B 的 +initialize 中的错误是因为它依赖于某种预期的应用程序状态,那么您可能真的想考虑重构 +initialize。由于这个确切的原因,它不应该依赖于类本身之外的任何东西......你无法保证它何时会触发或事物将处于什么状态。

关于objective-c - OCUnit 测试在未测试的类中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com