2011-11-10 71 views
1

我在+initialize中有一些我想测试的方法(使用简单的OCUnit)。即它是设置了一些用户默认,所以我的测试是这样的应用程序委托:在ObjectiveC中测试类的加载

  1. 检查没有值将要设置的;
  2. 加载一个类;
  3. 检查设定值的存在和正确性;

你有什么提示我该怎么做到这一点?

回答

0

是 - 您可以将您的默认初始化实现移出到单独的函数,您可以从+[MONObject initialize]调用该函数。

在不会将objc类(MONObject)加载到objc运行时的较低级别套件中测试该函数。

然后,您可以测试它并将其销毁到单独的可执行文件中,并依靠应用程序级别测试套件中的证明。

+0

似乎我应该得到较低级别测试的单独目标,然后(以便我的AppDelegate类)不会被编译/加载)。你认为我会在用户默认情况下使用stubbing方法调用,或者期望使用给定值的方法调用吗? – Eimantas

+0

准确地说 - 低层套件将是一个单独的目标,它不具备所有应用程序测试/类型。较低级别的目标可以创建,验证和销毁它在每次运行时选择的内容(假设进行串行测试)。应用程序和低级套件可以共享低级别测试的初始化,行为和错误检查。如果您想*真正*测试它,您还可以创建字典进行测试,并将字典保存为'standardUserDefaults'或使用'dictionaryRepresentation'。如果它真的很复杂,那么你可能只想保存一个或多个字典作为SUD中的一个关键字。 – justin

0

当您设置“用户默认设置”默认当没有其它值已被存储在“用户默认值”,它才会被使用。因此,如果您从“用户默认值”中调用一个值,除非您在之前的运行中存储了值,否则将获得默认值(请注意,由于“用户默认值”存储在两次运行之间,因此必须删除设备上的应用程序)。 您应该为所有“用户默认值”设置默认值,因为它仅适用于第一次使用。

我可能误解了你的问题,但我认为你是混合默认值和默认值的设置值,当没有设置时使用。

我也困惑为什么你要加载一个类+初始化类方法,在任何实例创建之前调用?

+0

我通常会将用户默认初始化放入应用程序委托的'initialize'方法中,因为它是发送到类的第一条消息,表示应用程序是否已完成启动。这样我在'applicationDidFinishLaunching:'方法中拥有所有需要的用户默认值。 – Eimantas