Ios 使用KIF设置应用程序环境
我用它来做UI测试。我想做的第一件事是清理模拟器中可能存在的所有缓存数据。因此,我在我的Ios 使用KIF设置应用程序环境,ios,ui-testing,kif,Ios,Ui Testing,Kif,我用它来做UI测试。我想做的第一件事是清理模拟器中可能存在的所有缓存数据。因此,我在我的KIFTestCase的-beforeal方法中编写了清理代码。但是,在调用我的应用程序委托-application:didfishlaunchwithoptions:方法之后,将调用此方法。现在已经太晚了,我的应用程序已经在运行,并且已经使用了缓存的数据 我可以用if(NSClassFromString(@“KIFTestCase”){…})之类的东西修改我的应用程序代码,但这看起来是一个糟糕的解决方案 在
KIFTestCase
的-beforeal
方法中编写了清理代码。但是,在调用我的应用程序委托-application:didfishlaunchwithoptions:
方法之后,将调用此方法。现在已经太晚了,我的应用程序已经在运行,并且已经使用了缓存的数据
我可以用if(NSClassFromString(@“KIFTestCase”){…})之类的东西修改我的应用程序代码,但这看起来是一个糟糕的解决方案
在执行我的应用程序代码之前,是否有一种干净的方法来执行一些设置代码
请注意,我无法使用Xcode的新内置UI测试功能,因为我想在iOS 8上运行测试。我可能会选择其中一种建议的解决方案(我们个人检查NSClassFromString(“XCTest”)!=nil
)
但是,如果两种解决方案都不适合您,并且您不介意一些运行时魔法,那么您可以:
- 创建包含所有测试逻辑的
AppDelegate
类的动态子类,并使用object\u setClass(AppDelegate,[TestAppDelegate class])
更改实例类(您需要有对应用程序委托实例的引用)
- 或者干脆在
+[TestHelper load]
中的问题中快速切换方法,这样在启动应用程序委派之前就会发生(可能会调用在快速切换之前保留的原始实现)
希望有帮助 据我所知,在KIF测试用例中,没有直接的可能性在应用程序委托方法运行之前进行设置工作-应用程序:didfishLaunchingwithoptions:
运行
另一方面,您可以从测试用例触发应用程序重置。我的做法如下:
- 从KIF测试用例执行设置工作(例如,更改活动语言或设置一些特殊的NSUserDefaults属性)
- 使用测试用例中的
NSNotificationCenter
发送通知,以触发应用程序重置
这种方法似乎相当有效。我能够使用它,例如,以不同的语言拍摄屏幕截图,从而设置应用程序语言,并从测试用例中重置应用程序状态
我准备了一个示例项目来说明它是如何工作的:
我通常在AppDelegate上使用#ifdef kifxctest
,它被定义为预处理器宏。如果链接断开,您可以重新上传示例吗?
[[NSNotificationCenter defaultCenter] postNotificationName:@"reset.app.state" object:self];
[tester waitForTimeInterval:1.0];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(resetAppState:) name:@"reset.app.state" object:nil];
- (void)resetAppState:(NSNotification*)notification
{
NSLog(@"Reset app state for UI-Tests");
// do other reset app state tasks, e.g. clean the caches & the like
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *controller = [storyboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = controller;
[self.window makeKeyAndVisible];
}