Objective c 在Objective中测试类的加载
我想测试一个类的Objective c 在Objective中测试类的加载,objective-c,testing,Objective C,Testing,我想测试一个类的+initialize方法中的一些代码(使用简单的OCUnit)。也就是说,它的应用程序委托设置了一些用户默认值,因此我的测试如下所示: 检查是否缺少要设置的值 加载一个类 检查设定值的存在和正确性 关于如何实现这一点,您有什么提示吗?是的-您可以将默认初始化实现移到一个单独的函数中,您可以从+[MONObject initialize]调用该函数 在不将objc类(MONObject)加载到objc运行时的较低级别套件中测试函数 然后,您可以在一个单独的可执行文件中对其进行测试
+initialize
方法中的一些代码(使用简单的OCUnit)。也就是说,它的应用程序委托设置了一些用户默认值,因此我的测试如下所示:
关于如何实现这一点,您有什么提示吗?是的-您可以将默认初始化实现移到一个单独的函数中,您可以从
+[MONObject initialize]
调用该函数
在不将objc类(MONObject
)加载到objc运行时的较低级别套件中测试函数
然后,您可以在一个单独的可执行文件中对其进行测试和销毁,并依靠应用程序级测试套件中的证明。当您设置“用户默认值”默认值时,它仅在“用户默认值”中未存储其他值时使用。因此,如果您从“用户默认值”调用一个值,您将获得默认值,除非您在上一次运行中存储了该值(请注意,您必须删除设备上的应用程序,因为“用户默认值”在两次运行之间存储)。
您应该为所有“用户默认值”设置默认值,因为它仅在第一次使用时适用
我可能误解了您的要求,但我认为您将默认设置值与从未设置过的默认值混合使用
我还不明白为什么要在+initialize class方法中加载一个在创建任何实例之前被调用的类?似乎我应该为较低级别的测试获取单独的目标(这样我的AppDelegate类就不会被编译/加载)。你认为我会在用户默认值上使用stubing方法调用,还是对那些具有给定值的方法调用抱有期望?没错,较低级别的套件将是一个单独的目标,它没有所有的应用程序测试/类型。较低级别的目标可以创建、验证和销毁它在每次运行时选择的内容(假设进行串行测试)。应用程序和低级套件可以共享低级测试所需的初始化、行为和错误检查。如果您想真正测试它,还可以创建要测试的词典,并将词典保存到
standardUserDefaults
或使用dictionaryRepresentation
。如果它真的很复杂,那么您可能只想将一个或多个字典保存为SUD中的一个键。我通常将用户默认初始化放入app delegate的initialize
方法中,因为这是发送给类的第一条消息,指示应用程序是否已完成启动。这样,我就在applicationdFinishLaunching:
方法中获得了所有需要的用户默认值。