iOS 测试三方 KIF 的那些事

一: KIF 三方库的配置  

    今天的广州天气还不错,原本想试试UI测试的,前几天也了解到很多公司都在用 KIF 这这三方框架!!今天也就试着做做,可就跪在了这个安装上,我用cocopods 导入了 KIF(不用cocopods 的方法可以去 git 具体自己看看怎么配置这是Git地址:GitKIF ),现在是已经更新到 3.4.2 这个版本了,去git上看到两天前作者还在更新。说明KIF是没问题还在更新维护是可用的。结果。。。Run~

dyld: Library not loaded: @rpath/XCTest.framework/XCTestReferenced from: /Users/mxsm/Library/Developer/CoreSimulator/Devices/B6E8A337-2678-4C4B-9DF1-C97586418141/data/Containers/Bundle/Application/6F05F8A0-A445-49F9-B222-570CA7C49EB6/sinatest.app/sinatestReason: image not found

    导演,你出来,这他么是什么鬼!!

    开玩笑,这个问题其实我也纠结了许久,上网搜了许多许多的方法,尝试了很多次!结果。。还是漏掉了要配置写东西!下面是官方英文版本,英语好的仔细阅读,不好的,请闭眼一秒钟,我们去下面看看。。。

 

      Final Test Target Configurations

     You need your tests to run hosted in your application. Xcode does this for you by default when creating a new testing bundle target, but if you're migrating an older bundle, follow the steps below.

      First add your application by selecting "Build Phases", expanding the "Target Dependencies" section, clicking on the "+" button, and in the new sheet that appears selecting your application target and clicking "Add".

      Next, configure your bundle loader. In "Build Settings", expand "Linking" and edit "Bundle Loader" to be $(BUILT_PRODUCTS_DIR)/MyApplication.app/MyApplication where MyApplication is the name of your app. Expand the "Testing" section and edit "Test Host" to be $(BUNDLE_LOADER). Also make sure that "Wrapper Extension" is set to "xctest".

      The last step is to configure your unit tests to run when you trigger a test (⌘U). Click on your scheme name and select "Edit Scheme…". Click on "Test" in the sidebar followed by the "+" in the bottom left corner. Select your testing target and click "OK".

      

     好,我把这整个给大家翻译成简单粗暴的形似。。(其实我都是百度翻译摸索的。劳之看不懂!)

      一: 项目名Tests对象 (项目名+Tests)---> Build Phase ---> Target Dependencies ---> "+" --->"项目的Tests文件"(去百度一下这个 tests 文件 和UItests 文件有什么区别)

     二: 项目名Tests对象 ---> Build Settings ---> Linking(直接搜)---> Bundle Loader 填写"$(BUILT_PRODUCTS_DIR)/项目名称.app/项目名称"

     三: 项目名Tests对象 ---> Build Settings ---> Wrapper Extension (直接搜)设置成 "xctest"

     四: 点击你 RUN 按钮隔壁的隔壁的项目target --->  Edit Scheme... ---> Test 看看里面有没有你要测试的项目,没有就添加(一般都有感觉)!

   

    这时候的配置完成了,Command + U,没有问题,以为可以了,可当自己写了一个继承 KIFTestCase 的文件的时候,问题又有了!说<KIF/KIF.h>头文件找不到,其实这个也正常,你现在是在 Tests 对象(这个项目里就是ZXDNLLTestTests)里面。不是在你得项目target对象里面,你得重新配置一下。下面是在你得 tests 对象里面的配置,这点地方填写的具体内容,从你的target对象(这个项目里面就是 ZXDNLLTest,怕有同学还是不明白!)里面粘贴复制就行了!

 

 

     以上这些配置了之后,我的 KIF 也就可以了。创建 LoginTestCasse ,再说一次,它是继承 KIFTestCase 如图:

       

二:具体测试代码详解

//
//  LoginTestCase.m
//  ZXDNLLTest
//
//  Created by mxsm on 16/4/28.
//  Copyright © 2016年 mxsm. All rights reserved.
//#import "LoginTestCase.h"
#import "AFNetworking.h"
@implementation LoginTestCase/*beforeAll 是一个在所有测试运行之前被调用一次的特殊方法。你可以为你这里运行的测试设置任何实体变量和初始化条件.tester 对象是指定的 KIFUITestActor 类的一个缩略名称。这个类包含了模拟用户动作的方法,包括触摸和滑动.tapViewWithAccessibilityLabel 这也许是最常被用到的测试动作方法。正如其名称所显示的,它可以在给定的辅助标签模拟在视图上的触击。在大多数情况下,辅助标签和可视的文本标签(例如按钮组件)是配套的。否则你就需要手动设置辅助标签.一些控件,诸如 UISwitch,更加复杂,需要比简单的触击更复杂的步骤来触发。 KIF 提供了一个特殊的 setOn:forSwitchWithAccessibilityLabel: 方法来改变一个切换的状态.
*/- (void)beforeAll {[tester tapViewWithAccessibilityLabel:@"Settings"];[tester setOn:YES forSwitchWithAccessibilityLabel:@"Debug Mode"];[tester tapViewWithAccessibilityLabel:@"Clear History"];[tester tapViewWithAccessibilityLabel:@"Clear"];}//  这里的测试方法使用 test开头的,后面的自己写,你要用command+U 的形式运行的话,它的运行的顺序就是除了test之外的后面的按字母排序的方式运行,比如下面的这个方法,出test之外第一个字母是Z,你要是又命名一个方法,testyou ,它是y ,他就会先运行。当然你也可以一个方法一个方法的运行,点击方法前面的框框就OK了!-(void)testzhangxuone
{// 可以在这里添加自己需要的测试的内容!int a = 0;if (a==0) {NSLog(@"you are successful");}
}/* 下面是在简书找到的一篇关于单元测试的一个网络请求的测试,其实大家可以对比一下KIF !!!KIF和苹果自带的UI测试两者本质是一样的!不过下面的请求是   AFNetworking 3.0 以前的版本的,大家用还是用3.0之后的吧!AFHTTPSessionManager *session = [AFHTTPSessionManager manager];关于3.0 之后的给大家一个连接,可以去看看!====== http://www.jianshu.com/p/047463a7ce9b*///   下面方法的原文链接  ============= http://www.jianshu.com/p/8bbec078cabe//-(void)testRequest{
//    // 1.获得请求管理者
//    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//    mgr.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",nil];
//    // 2.发送GET请求
//    [mgr GET:@"http://www.weather.com.cn/adat/sk/101110101.html" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
//        NSLog(@"responseObject:%@",responseObject);
//        XCTAssertNotNil(responseObject, @"返回出错");
//        self.stAlertView = [[STAlertView alloc]initWithTitle:@"验证码" message:nil textFieldHint:@"请输入手机验证码" textFieldValue:nil cancelButtonTitle:@"取消" otherButtonTitle:@"确定" cancelButtonBlock:^{
//            //点击取消返回后执行
//            [self testAlertViewCancel];
//            NOTIFY //继续执行
//        } otherButtonBlock:^(NSString *b) {
//            //点击确定后执行
//            [self alertViewComfirm:b];
//            NOTIFY //继续执行
//        }];
//        [self.stAlertView show];
//    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//        NSLog(@"error:%@",error);
//        XCTAssertNil(error, @"请求出错");
//        NOTIFY //继续执行
//    }];
//    WAIT  //暂停
//}@end 

      网上有一篇翻译的国外的文章,好多好多写 KIF 的直接是把那篇给通篇粘贴复制了,链接还是给大家,你理解了KIF,知道他是做什么的,也导入成功了,你可以去看看那篇文章,对自己肯定也有帮助,链接给大家! KIF学习链接

    还有一点注意,我代码里面给的 http://www.jianshu.com/p/8bbec078cabe 这个链接里面,还有几个链接不错的,有更进一步学习单元测试的视频,大家进去自己看就行了!

转载于:https://www.cnblogs.com/zhangxiaoxu/p/5464458.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter1-4_Speech_Recognition(HMM)

文章目录1 HMM用在哪里2 HMM的state3 改造成DNN3.1 Tandem3.2 DNN-HMM Hybrid本文为李弘毅老师【Speech Recognition - HMM (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。其中也涉及到了部分李琳山老师关于HMM的详解&#…

Express 结合 multer 上传图片

一、 Multer 模块介绍 Multer 是一个 node.js 中间件&#xff0c;用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用 于上传文件。 它是写在 busboy 之上非常高效。 注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。 https://www.npmjs.com…

ad19pcb设置恢复默认_条码打印机-斑马产品常用恢复出厂设置

当我们手上拿到条码打印机&#xff0c;遇到一下无法挽回的时候&#xff0c;我们可以选择恢复下出厂设置&#xff0c;这样使打印机还原到出厂&#xff0c;或许是很好的选择&#xff0c;接下来我们看下斑马条码打印机操作方法如下&#xff1a;Zebra 条码打印机恢复出厂1、有面板的…

Chapter1-5_Speech_Recognition(Alignment of HMM, CTC and RNN-T)

文章目录1 为什么需要Alignment2 穷举所有的alignment2.1 HMM的对齐2.2 CTC的对齐2.3 RNN-T的对齐3 小结本文为李弘毅老师【Speech Recognition - Alignment of HMM, CTC and RNN-T (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻…

mongoose 入门以及 mongoose 实现数据 的增、删、改、查

一、mongoose 介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动&#xff0c;不能作为其他语言的驱动。 Mongoose 有两个特点 &#xff1a; 1、通过关系型数据库的思想来设计非关系型数据库 2、基于 mongodb 驱动&…

64位处理器_电脑操作系统的32位和64位有什么区别

想买个新电脑&#xff0c;不知道买 64 位还是 32 位&#xff1f;买了一套视频剪辑软件&#xff0c;发现电脑根本安装不了&#xff1f;这些到底是为什么&#xff1f;对于 Windows7 及以上版本&#xff0c;我们能够很明显知道自己电脑操作系统是 64 位还是 32 位。如果你还不知道…

Chapter1-6_Speech_Recognition(RNN-T Training)

文章目录1 一个alignment概率的计算2 所有alignments概率的计算3 Training4 Inference5 小结本文为李弘毅老师【Speech Recognition - RNN-T Training (optional)】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来…

Mongoose 预定义模式修饰符 Getters 与 Setters 自定义修饰符

一、mongoose 预定义模式修饰符 lowercase、uppercase 、trim mongoose 提供的预定义模式修饰符&#xff0c;可以对我们增加的数据进行一些格式化。 var UserSchemamongoose.Schema({ name:{ type:String, trim:true }, age:Number, status:{ type:Number, default:1 } })二…

微信可以远程控制电脑吗_用微信就能远程控制电脑,这款神器有些厉害

「本期内容标签」安卓 iOS 电脑 小程序 网站 游戏 教程微信确实一步步改变生活&#xff0c;尤其是微信小程序面世以来&#xff0c;可谓是神器一个接一个的出现&#xff0c;很多功能已经和手机app旗鼓相当了。那么&#xff0c;今天说的这款刚推出的微信小程序&#xff0c;实现远…

开源的excel读取库libxls在windows下的编译,且支持中文,全网首发

转载请注明出处&#xff1a;http://www.cnblogs.com/superbi/p/5482516.html 到目前为止&#xff0c;网络和官网上并没有关于libxls在windows下支持中文的教程&#xff0c;也没有现成的二进制文件。 想直接得到结果的请直接拉到最后获取成果&#xff0c;想自己以后遇到类似问题…

Chapter1-7_Speech_Recognition(Language Modeling)

文章目录1 为什么需要Language Model2 N-gram3 Continuous LM3 NN-based LM4 RNN-based LM5 合并LAS和LM5.1 shallow fusion5.2 deep fusion5.3 cold fusion本文为李弘毅老师【Speech Recognition - Language Modeling】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;…

Mongoose 索引、Mongoose 内置 CURD 方 法、扩展 Mongoose Model 的静态方法和 实例方法

一、Mongoose 索引 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样&#xff0c;这其中也包括一些基本的查询 优化技巧。 mongoose 中除了以前创建索引的方式&#xff0c;我们…

winre drv分区干嘛用的_都2020年了,还在给硬盘分区?看完你就知道有没有必要了...

电脑硬盘&#xff0c;到底该不该分区&#xff1f;很多人买了新电脑或者在电脑中安装了SSD硬盘之后&#xff0c;第一个步骤就是&#xff1a;开机-给硬盘分区。但是&#xff0c;大家有没有考虑过&#xff0c;硬盘是否真的需要分区呢&#xff1f;这不最近有人就在程序员社区V2EX上…

php 系列

1.给 跑在windows 环境下的php&#xff0c; 安装redis 拓展。&#xff08;installing Redis & Redis extension in PHP on XAMPP on windows.&#xff09; step 1: 安装redis server&#xff08;windows&#xff09; http://fellowtuts.com/php/install-redis-redis-extens…

搞懂RNN

文章目录1 什么是RNN2 LSTM3 Training3.1 Learning Target3.2 为什么难train4 应用举例4.1 Many To One4.2 Many To Many4.3 其他本文为李弘毅老师【Recurrent Neural Network(Part I)】和【Recurrent Neural Network(Part II)】的课程笔记&#xff0c;课程视频来源于youtube(需…

bp神经网络预测_股指期货价格变动趋势往往反映的是股票价格的走势,因此BP神经网络对股指期货价格的准确预测就是对股票价格的准确预测。...

一只猫の生活态度对于投资者而言&#xff0c;利用BP神经网络模型对股指期货价格进行准确预测&#xff0c;可以帮助投资者构建较佳的投资组合&#xff0c;从而获取较好的投资收益&#xff0c;规避系统风险&#xff1b;对于国家而言&#xff0c;准确预测股指期货价格走势&#xf…

Mongoose aggregate 多表关联查询

1. 查询每个order订单中的所有orderItem&#xff08;多表关联查询&#xff09; order.js: var mongoose require(./db.js)var OrderSchema mongoose.Schema({order_id: String,uid: Number,trade_no: String,all_price: Number,all_num: Number })var OrderModel mongoose…

搞懂Transformer

文章目录1 内容简述2 seq2seq的常用模块3 Self-attention4 Multi-head Self-attention5 Positional Encoding6 Transformer参考资料文为李弘毅老师【Transformer】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自…

excel计算二元线性回归_怎么看懂Excel线性回归参数

虽然之前用python做线性回归的时候看上去好像很简单&#xff0c;但是直到我在excel上实践了线性回归&#xff0c;发现有很多指标值得去参考&#xff0c;对于在python上实现有指导作用。打开excel2016&#xff0c;先找个数据我们这里直接选择做线性回归&#xff0c;在菜单栏选择…

冲刺阶段 day 6

项目进展&#xff1a;学生管理这部分已经进展的差不多了&#xff0c;调试了几遍,改了几个小Bug之后就没有什么问题了,基本完成&#xff0c;如若后续还有一些新的功能到时候再自行加入。明天开始教师部分。 存在问题&#xff1a;我觉得我们的项目还是比较课堂&#xff0c;比较中…