- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用 KIF 框架 ( http://github.com/kif-framework/KIF ) 进行 UI 测试我需要模拟定位服务。
问题是位置服务在调用 KIF 方法 -beforeAll 之前启动。所以现在 mock 为时已晚。
如有任何建议,我们将不胜感激。
最佳答案
在我的 KIF 目标中,我有一个 BaseKIFSearchTestCase : KIFTestCase
,我在其中覆盖了类别中的 CLLocationManager 的 startUpdatingLocation。
请注意,这是我做过的唯一一次类别覆盖,因为这通常不是一个好主意。但在测试目标中我可以接受。
#import <CoreLocation/CoreLocation.h>
#ifdef TARGET_IPHONE_SIMULATOR
@interface CLLocationManager (Simulator)
@end
@implementation CLLocationManager (Simulator)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
-(void)startUpdatingLocation
{
CLLocation *fakeLocation = [[CLLocation alloc] initWithLatitude:41.0096334 longitude:28.9651646];
[self.delegate locationManager:self didUpdateLocations:@[fakeLocation]];
}
#pragma clang diagnostic pop
@end
#endif // TARGET_IPHONE_SIMULATOR
#import "BaseKIFSearchTestCase.h"
@interface BaseKIFSearchTestCase ()
@end
@implementation BaseKIFSearchTestCase
//...
@end
更干净的方法是在您的应用程序目标中有一个 CLLocationManager
的子类,在您的测试目标中有另一个具有相同名称的子类,如上所示发送假位置。但是,这是否可能取决于您的测试目标是如何设置的,因为它实际上需要是一个应用程序目标,因为 Calabash 使用它。
另一种方式:
在您的项目中创建另一个配置“Testing”,克隆“Debug”
将 Preprocessor Macro
TESTING=1
添加到该配置。
子类 CLLocationManager
在您要使用 CLLocaltionManger 的地方使用那个子类
有条件地编译那个类
#import "GELocationManager.h"
@implementation GELocationManager
-(void)startUpdatingLocation
{
#if TESTING==1
#warning Testmode
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
CLLocation *fakeLocation = [[CLLocation alloc] initWithLatitude:41.0096334 longitude:28.9651646];
[self.delegate locationManager:self didUpdateLocations:@[fakeLocation]];
});
#else
[super startUpdatingLocation];
#endif
}
@end
在您的测试目标方案中选择新配置
还有一个选择:
可能是最好的:无需更改代码。
关于ios - 如何使用 KIF 框架模拟位置服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22560990/
我正在使用 KIF 来测试我的应用程序。我想从命令行开始我的测试,我查看了工具 WaxSim,看起来它是为了在模拟器上运行测试。但是有没有办法在与真实设备的持续集成中使用 KIF 测试。如果我可以从在
我正在使用 KIF 来测试 iOS 应用程序,我想知道是否有办法在当前屏幕中获取所有辅助功能标签。我想获得一个字符串数组,其中每个元素都是此屏幕具有的可访问性标签。 最佳答案 这个函数可以返回 Vie
我正在尝试在示例应用中使用 KIF 学习自动化 UI 测试。我的简单测试不断失败。我的代码: #import #import @interface AutomatedUITestsSampleUI
我计划在以下设置中使用 KIF: 1.自己的静态库 2. 许多使用静态库的“外壳”应用程序。这些应用程序提供内容和配置,但它们都使用公共(public)库来加载基于内容而非配置的内容。 我应该如何整合
这是相当开放的。 有没有人知道如何在 KIF 测试中测试下拉刷新功能? 最佳答案 只需从屏幕顶部向下拖动到屏幕底部即可,对吗? KIF 在 UIView-KIFAdditions 类别中实现了以下方法
我正在使用 KIF做 UI 测试。我要做的第一件事是清理模拟器中可能存在的所有缓存数据。所以我在 -beforeAll 中编写了清理代码我的方法KIFTestCase .但是这个方法是在我的应用程序委
我尝试在 swift 项目中使用 KIF。我在 iPhone 模拟器上运行测试用例。可能我没有正确设置 KIF,因为第一次使用它。我用过这个manual 在这个简单的代码中测试失败 func test
我看了很多,但我无法找到使用 KIF 点击模拟器状态栏区域的方法。我想通过点击那里来测试滚动到表格 View 顶部的情况。 我试过的两种方法: CGFloat middleOfScreen = flo
我正在使用 KIF test framework .目前,我能够通过以下行检测到表不为空: tester().waitForCellAtIndexPath(NSIndexPath(forRow: 0,
我正在尝试编写一个 KIF 测试来检查我应用中两个不同帐户的登录情况。 现在的问题是,我需要从用户第一次登录后看到的 DetailView 中获取数据,并将其与第二次登录后看到的数据进行比较,确认数据
我是 iOS、xcode、KIF 框架和 Objective C 的新手。我的第一个任务是使用 KIF 编写测试代码。如果 KIF 有条件语句,看起来肯定会容易得多。 基本上是这样的: if ([te
我已在 iOS 模拟器中打开辅助功能并尝试运行我的 KIF 测试,但我不断收到以下错误: ** Terminating app due to uncaught exception 'NSInterna
我正在使用 Kif 并尝试使用文本字段和添加按钮创建一些数据 如果我使用此代码一次: - (void)addTextItem { [tester enterText:[NSString str
如何使用 KIF 执行双击? 我试过两次调用 tapViewWithAccessibilityLabel: 并在两次调用之间添加延迟,但没有任何效果。测试没有失败,这意味着 KIF 能够执行单次点击,
我想在 Kif 中截图。我看到了here在 kif 项目的私有(private)类(class)中,这是可能的,但我很难尝试将其转换为一个步骤。谁能帮忙? 最佳答案 这是在 KIF 3.0.4 中添加
我使用了最新版本的 KIF 框架并创建了几个测试用例(KIFTestCase 的子类)。 我可以知道有什么方法可以更改测试运行顺序吗? 例如,我有 testA.m testB.m testC.m ..
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用 KIF 为一个项目开发测试。我想知道是否可以让 KIF 模拟点击主页按钮?是不是也可以在那个时候模拟其他 Action ,比如调出命令中心或者通知中心? 最佳答案 至少为您提供了部分答案,
我使用 KIF 框架 ( http://github.com/kif-framework/KIF ) 进行 UI 测试我需要模拟定位服务。 问题是位置服务在调用 KIF 方法 -beforeAll 之
我使用 KIF测试持续集成的 UI。当应用程序首次在设备(或 iOS 模拟器)上启动时,系统会显示一些安全警报 View 。 KIF 如何自动确认系统警报以防止测试失败? 最佳答案 最好的方法是使用[
我是一名优秀的程序员,十分优秀!