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:
    方法中获得了所有需要的用户默认值。