Tag: xctest

使用Vapor Server Side Swift框架存根XCUITests

最初在XCBlog上发布在这里 毫无疑问,Swift是用于为iOS,macOS,watchOS和tvOS等Apple平台开发本机应用程序的出色语言。 但是,作为一种新语言,Swift缺少许多测试功能,就像我们在其他编程语言(如Ruby)中看到的那样。 在Swift中使用协议模拟类非常困难,并且存根网络请求的选项非常有限。 模拟是脆弱而艰苦的,到Swift时模拟变得更加困难。 Swift中没有可用的成熟模拟库来生成类似Java,Ruby,Python或其他语言的模拟。 开发人员必须手动编写所有模拟,并将测试代码与生产代码紧密耦合。 这里有一篇很棒的关于iOS网络测试的文章,以了解有关如何使用协议进行模拟的更多信息。 存根是测试代码的另一种方式,而不必依赖后端或网络。 使用存根,我们仍然可以实现网络测试的目标,并且不必将测试代码与生产代码紧密耦合。 我们将看到可用于存根的库的详细信息。 一些最受欢迎的库是用于XCTest(unit)测试的OHHTTPStubs,Mockingjay,Hippolyte。 用户界面测试贯穿网络层,涵盖了网络测试的所有方面。 苹果有XCUITest框架来涵盖Xcode UI测试。 我们可以使用一些库来为UITest存根网络。 一些流行的库包括Swifter,SBTUITestTunel和XCUITest(UITest)的Embassy。 但是,市场上出现了新的服务器端Swift框架,例如Vapor,Kitura,Perfect,它们也可以用于暂存网络请求。 在这篇文章中,我们将看到如何使用Vapor服务器端swift框架对网络请求进行存根。 Apple在WWDC 2015上宣布了Xcode的UI测试支持。UI测试被设计为完全黑盒,无需访问主应用程序代码和数据。 XCUITest使用两个独立的进程Test Runner和Target应用程序,测试运行器启动了目标应用程序,并使用UIKit内置的可访问性功能与在单独进程中运行的应用程序进行交互。 在嘲笑或测试UITest时,我们几乎没有选择 模拟和通过发射参数/环境 这意味着您不能直接模拟API。 与代理应用程序通信的唯一方法是传递启动参数或启动环境。 我们可以传递模拟API并创建启动环境变量,然后将其传递给XCUITests,但这需要大量的工作。 代码用if-else语句括起来,以确定听起来不太好的构建配置。 Web服务器存根后端并返回响应 剩下的其他选择是对网络呼叫进行存根并从服务器获取所需的数据。 为此,我们需要模拟后端并指向我们的应用程序以使用这些端点。 问题是我们是否仍可以使用上面提到的存根服务进行单元测试。 我们仍然可以使用这些库来处理网络请求,但是有时它需要更改主应用程序的逻辑,并且需要重构某些东西以增加额外的工作。 我们需要在生产代码中添加很多测试代码。 在我先前关于XCUITest的网络存根选项的文章中,我们介绍了所有选项,例如Swifter,SBTUITestTunel和Embassy for XCUITest。 现在,让我们详细介绍一下Vapor。 服务器端Swift框架尚未投入生产,但我们可以将其用于存根XCUITest的目的。 我还没有在互联网上读过任何人做的书,但是它工作得很好。 市场上几乎没有可用的Server Side Swift框架,例如Perfect,Kitura,Zewo和Vapor,但在此演示中,我们将使用Vapor。 选择蒸气的原因是它很容易学习,并且蒸气周围的社区正在迅速发展。 它完全由Swift编写,并带有易于上手的Vapor工具箱。 为了演示此功能,我创建了一个演示应用程序,当我们在文本字段中输入Github用户名时,它将显示Github用户信息。 您可以从Github Vapor-XCTest克隆该应用程序,该应用程序具有带有和不带有存根的XCUITests。 您需要安装Xcode 9+和OpenSSL,然后我们才能签出演示应用程序。 $ git clone https://github.com/Shashikant86/Vapor-XCTest […]

使用无构建测试,xctestrun和Fastlane加速iOS CI

PS:这篇文章最初发表在我的个人博客上; XCBlog 在这里 在WWDC 2016上,有一个关于“高级测试和持续集成”的精彩演讲,其中提到了XCTest Framework,Xcode-Sever和xcodebuild命令行工具中的许多新功能。 我们可以使用这些功能来加快iOS持续集成过程。 当前的iOS CI限制 在Xcode 8之前,我们必须在CI上运行单元测试和UI测试之前构建,编译和应用程序,这是正在运行的任务的重复。 分布式测试非常耗时,而且我们已经在每台机器上构建和编译源代码。 实际上,在CI Server上进行构建和编译需要花费大量的构建时间。 Xcode 8和xcodebuild功能 Xcode 8版本在“ xcodebuild”中购买了几个新功能,可以为iOS开发和测试过程增加很多价值。 “ xcodebuild”是用于从命令行构建,运行和执行我们的应用程序的命令行工具。 在Xcode服务器中使用。 Xcode 8现在在xcodebuild命令行工具中进行了一些改进。 测试构建 xcodebuild现在具有“ build-for-testing”选项,它像往常一样采用工作区方案和目标,但是最重要的是它将创建“ XCTESTRUN”文件。 我们只需要执行“测试构建”操作 $ xcodebuild -workspace -scheme -sdk iphonesimulator -destination’platform = iOS Simulator,name = ,OS = 10.2’构建测试 这应该构建用于测试的应用程序,并在DerivedData中创建xctestrun文件。 无需构建即可测试 xcodebuid还具有另一个名为“ test-without-building”的选项,在这里我们不需要提供工作区,而是指定XCTESTRUN文件,该文件将注入该文件并运行所有测试。 此功能对于分布式测试非常有用,因为我们可以在一台计算机上创建XCTESTRUN文件并分发到其他特定于测试的计算机。 为了使用它,我们可以在不构建的情况下将此选项指定为ru测试 $ xcodebuild -workspace -scheme -sdk iphonesimulator […]

通过重新运行不稳定的XCUI测试来稳定iOS CI

Apple在WWDC 2015上发布了Xcode UI Testing aka XCUI Test framework,该框架无需使用Appium,Calabash或KIF等任何第三方工具即可直接从Xcode对iOS应用程序进行UI测试。 这些工具自称为移动测试框架,但实际上只不过是UIAutomation或Instruments的包装器而已。 随着Apple停止支持Instruments技术,iOS 10的发布打破了所有这些开源移动测试自动化框架。 剩下的唯一选择是使用Apple的XCTest框架,或者等待那些工具围绕XCUITest构建包装器。 XCTest不是一个新的框架,但是随着Xcode发行版的发展,它发展得相当不错。 您可以在此处阅读有关使用XCTest进行iOS应用测试的优缺点的更多信息 XCUITest +持续集成问题 XCUITest框架仍然是新的,有些用户已经抱怨它非常脆弱,尤其是当我们针对持续集成(CI)服务器运行时。 XCUI测试似乎在本地通过,但是这些测试对CI不确定。 您可以在StackOverflow上找到许多有关XCUITest的问题。 结果是,CI管道变得不可靠且不受信任。 团队一直忽略失败的UI测试,每个人对这些UI测试失去信任,这可能成为持续集成失败的原因。 损坏的UI测试始终被开发团队忽略。 但是,持续交付将不允许将损坏的版本部署到生产中。 现在,每个人都注意损坏的UI测试。 为了解决问题,团队可能会执行以下操作以确保您的UI测试尽可能具有弹性。 遵循“端口和适配器”模式,以覆盖域层的所有业务逻辑,而无需编写任何UI测试。 很好的例子就是用Fitnesse编写更快的iOS验收测试或合同测试 考虑使用存根后端或模拟Web服务器隔离测试UI,以防止意外数据替换真实Word UI测试。 添加了XCUI计算的重试,以找到应用程序上的UI元素或循环运行,直到找到XCUIElement。 在每个CI构建或每个测试套件上重置模拟器。 向XCUITests添加了静态等待,以使测试可靠。 经过所有这些努力,也许很少有测试仍不确定,并且随机失败,人们会感到沮丧。 这是UI测试的常规行为,它们脆弱,易碎且难以维护,无论您付出了多少努力来进行修复,也无论您为防御它而付出了多少防御,运行时环境的特殊性都可能使您感到阴谋。 现在,由于不稳定的UI测试,您的正式发布已被阻止。 现在做什么 ? 解 在上述情况下,我们可以尝试一件明智的事情。 让我们以失败的XCUITests为例,尝试重新运行它们,但是挂起一个,还有另一个问题。 苹果的命令行工具“ xcodebuild”仍然没有从命令行运行单个XCTest的简便方法。 可能需要使用Xcode方案进行测试,但是将单个测试传递给“ xcodebuild”有点棘手。 新版本的“ xcodebuild”具有“仅测试”选项,但是使用脚本很难实现。 幸运的是,有一个名为“ fastlane-plugin-setup_fragile_tests_for_rescan”的fastlane插件可以解决不稳定的XCUI测试问题。 全部的感谢归功于插件“ lyndsey-ferguson”的作者。 这个插件做以下事情 从快速通道扫描生成的Junit报告中进行失败的测试 修改指定的XCUITest方案以跳过通过测试和失败测试的方案 重新运行“扫描” 3次以查看测试结果。 […]

XCFit:具有Swift 3.1和Xcode 8.3支持的iOS完整堆栈BDD框架

XCFit是Xcode中的全栈iOS BDD框架。 XCFit设置带有框架代码和目录结构的Xcode模板,这有助于我们开始使用BDD,而XCFit Swift Framework提供了许多预定义的BDD样式步骤,从而可以用更少的代码来实现自动化BDD。 您可以在Github上阅读XCFit的详细信息。 XCFit 4.0已发布,具有很多功能,简短的发行说明可在GitHub上获得。 让我们详细了解XCFit 4的新功能。 XCFit 4.0 XCFit 4.0是主要版本,对Swift框架进行了许多改进。 XCFit 4 .0具有以下主要更改。 支持Swift 3.1和Xcode 8.3 添加了对带有集成Cucumberish库的XCFit框架的迦太基支持。 为XCFit和Cucumberish添加了许多预定义步骤,以便我们可以将其直接用于我们的项目中。 通过将XCFit和Fitnesse模板分别放在不同的命令中来改进Xcode模板。 在Youtube上使用Video Demo改进了XCFit的README和Web页面文档。 让我们简要地看到新的变化。 Swift 3.1支持 苹果刚刚发布了Swift-3.1-dev快照,其中对XCTest框架进行了一些有用的更改。 您可以在DZone博客上的XCUITests中阅读有关新添加的类的信息。 基本上,XCUITest现在支持异步测试,并能够使用新类控制Siri。 苹果已经添加了XCWaiter类,以使XCFit能够更好地等待服务员。 XCFit 4.0是完全基于Swift 3.1构建的,您可以在Cocoapods上看到Swift版本。 这个想法是从XCFt 3.1开始完全支持XCFit Swift框架。 如果尚未安装Swift 3.1,则可能需要等到Swift 3.1公开发行版才能使用XCFit 4.0的新功能。 迦太基支持 XCFit Swift框架现在可以使用Carthage构建,以前它仅与Cocoapods一起使用,但是XCFit 4.0也为Carthage添加了支持。 XCFit依赖于Cucumberish框架,因此我们可以通过拉XCFit来获得这两个框架。 只需在项目根目录中的Cartfile中添加以下内容 Github“ Shashikant86 / XCFit” 现在,我们可以使用以下命令下载并构建框架 $ carthage更新—平台iOS […]

使用XCUISiriService从XCTest控制Siri

苹果已经发布了带有新Swift 3.1快照的新Xcode 8.3 beta 2,可以从Apple开发者帐户下载。 Xcode 8.3 beta 2中有很多新功能,如果您拥有Apple开发人员帐户,则可以阅读发行说明。 在XCTest框架中添加了一个方便的类,以通过XCUI Test(即XCUISiriService)与Siri进行交互。 在这篇文章中,如何启用与Siri的交互。 Xcode 8.3 Beta 2 Xcode 8.3 beta 2中提供了新添加的类XCUISiriService,如果您具有Apple Developer Account,则当前可以下载该类。 您可以从开发者帐户的“下载”部分获得它。 Xcode 8.3需要macOS版本10.12及更高版本。 您可以下载大约4.​​52 GB的压缩XIP文件。 如果您已经具有以前版本的Xcode,请删除它或保留它,但是必须在Xcode DEVLOPER_DIR之间切换。 下载完成后,您可以解压缩文件以安装Xcode 8.3 beta,并等待Xcode和命令行工具的安装。 一旦使用所有命令行工具完全安装了Xcode 8.3 beta 2,我们可以将其拖到/ Applications路径中。 现在,我们必须通过运行以下命令来切换到新的Xcode版本 $ sudo xcode-select —切换/Applications/Xcode-beta.app/ 这将设置新的DEVELOPER_DIR,我们准备使用Xcode 8.3。 确保使用xcrun使用正确的工具链— find swift命令将显示您正在使用的当前工具链。 $ xcrun —快速查找 /图书馆/开发人员/工具链/swift-3.1-DEVELOPMENT-SNAPSHOT-2017–01–22-a.xctoolchain/usr/bin/swift 现在,请确保导出工具链并使用正确的Swift版本,此版本当前为Apple Swift版本3.1-dev。 您可以通过运行以下命令轻松地做到这一点。 $ […]

使用XCWaiter在Swift中进行异步iOS测试

苹果公司最近为开发人员发布了Swift 3.1开发快照和XCode 8.3。 XCTest框架中添加了几个方便的类,以为iOS和macOS应用程序启用异步测试。 在本文中,我们将看到如何使用XCWaiter执行异步测试。 Swift 3.1开发版 Xcode 8.3中提供了新添加的类,如果您具有Apple Developer Account,则当前可以下载该类。 您可以从开发者帐户的“下载”部分获得它。 Xcode 8.3需要macOS版本10.12及更高版本。 您可以下载大约4.​​52 GB的压缩XIP文件。 如果您已经具有以前版本的Xcode,请删除它或保留它,但是必须在Xcode DEVLOPER_DIR之间切换。 下载完成后,您可以解压缩文件以安装Xcode 8.3 beta,并等待Xcode和命令行工具的安装。 一旦使用所有命令行工具完全安装了Xcode 8.3,我们就可以将其拖到/ Applications路径中。 现在,我们必须通过运行以下命令来切换到新的Xcode版本 $ sudo xcode-select —切换/Applications/Xcode-beta.app/ 这将设置新的DEVELOPER_DIR,我们准备使用Xcode 8.3。 确保使用xcrun使用正确的工具链— find swift命令将显示您正在使用的当前工具链。 $ xcrun —快速查找 /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 现在,请确保导出工具链并使用正确的Swift版本,此版本当前为Apple Swift版本3.1-dev。 您可以通过运行以下命令轻松地做到这一点。 $ export TOOLCHAINS = swift $ swift —版本 Apple Swift版本3.1-dev(LLVM 40fb70e1b6,Clang 658ce8b57d,Swift d6c7fe1067) 目标:x86_64-apple-macosx10.9 […]

iOS上的UITest轻松完成

我们知道,设计和编写测试并不是世界上最令人兴奋的事情,但是对于您编写的任何应用程序,测试都是绝对必要的。 它们可能是AppStore上闪闪发光的5星级应用程序,或者是漏洞百出的代码集之间的区别。 我们都知道什么是单元测试以及如何编写它们,但是自XCode 7以来,Apple便向我们介绍了其IDE中的UI测试。 通过这些测试,您可以记录用户与应用程序的交互,并检查其是否表现正常。 在本文中,我们将重点关注测试的UI方面,以及如何在iOS应用中记录和编写您的第一个测试。 但是为什么要专注于UI? 您的应用程序可能在后台执行了它需要做的所有事情,并且单元测试可能具有100%的覆盖率,但是对于普通用户来说,如果有什么地方不合适,那么就会出现问题。 通过测试应用程序的用户界面,您可以查看用户与用户界面的交互方式,并检查他们是否看到了应有的样子。 现在,让我们深入研究如何轻松测试UI而不会有任何麻烦。 在开发iOS应用程序时,我们必须首先决定将使用哪种架构。 苹果建议 ,大多数开发人员都使用MVC,但是MVC有其缺点。 我们可能都在某个地方读过或听到过大量的视图控制器笑话 。 可悲的是,在大多数情况下是这样。 当我们不得不将与View或Model逻辑不相关的所有内容放到Controller逻辑中时,控制器中会生成很多代码,而在Model或View中则不会那么多。 让我们快速看一下Viper是什么及其组件。 如果您不熟悉Viper,让我们快速介绍一下。 Viper是View,Interactor,Pentent,Entity和R external的首字母缩写。 这基本上是一种实施“ 单一责任原则”的方法 ,旨在创建一个更清洁,更模块化的结构。 Viper通过具有以下结构来实现此目的: 在上面的插图中,我们可以看到Viper方法以及架构的每一部分如何相互集成。 毒蛇的每个元素都负责完成一项工作,并要求/将任何其他工作发送/发送到负责任的元素。 例如,演示者告诉视图它需要显示什么。 在这种情况下,View的唯一工作就是显示演示者告诉其显示的内容。 为了帮助测试,Viper的每个元素(实体除外)都实现了一个协议,因此您可以轻松模拟类的任何部分并编写零麻烦的测试。 很简单吧? 让我们深入了解Viper的每个主要组件。 视图是被动的,因为它基本上只是等待演示者提供其内容来显示。 它还需要接收来自用户的输入,如果需要处理任何内容,则将其传递给Presenter。 View还具有有关如何显示数据的所有逻辑,例如哪些信息进入UILabel,以及哪些UIImageView将用于显示Presenter发送的图像。 输入想要用于测试目标的名称并创建它。 XCode会将这个新目标添加到您的项目中,并自动创建一个与目标名称相同的新文件。 在此文件中,您将已经创建了一些功能。 在每个测试之前和之后都有setUp()和tearDown()运行,还有一个testExample()。 您可以根据需要删除它们,但是为了简单起见,您可以选择函数testExample()并开始测试。 然后,XCode将允许您通过页面底部的红色圆圈按钮记录测试。 单击它,XCode将构建您的应用程序并启动模拟器。 您在此模拟器上执行的每项操作都将记录并记录在所选功能上。 我为本文创建的页面包含两个元素:UIImage和UIButton。 当我运行记录器并单击两者时,它生成了以下代码: 哇,这是很多用于点击图像的代码,不是吗? UIButton更好,因为它具有文本并且XCode知道如何搜索它,这意味着您可以找到所需的内容。 那么,如何处理图像呢? 嗯,有一个accessibilityLabel可以帮助您在屏幕上找到任何元素。 我将图像的acessibilityLabel设置为profileImage ,这使您的测试代码更易于编写。 开发iOS应用程序时,可访问性标签是您最好的朋友。 它为听力障碍的用户提供了一种导航您的应用程序的方式,还可以帮助您更好地测试UI。 您必须问自己,为什么我首先向您介绍了Viper。 当然,我们所做的测试可以使用MVC进行,但是如果您必须测试应用程序中更深层次的内容怎么办? […]

将酱汁添加到Xcode UI测试:XCUITest +酱汁实验室

XCBlog上的原始帖子在这里 Sauce Labs刚刚宣布支持在其自己的设备场中运行XCUITests。 他们已经在官方博客上宣布了支持。 随着苹果自己的Xcode UI测试框架变得越来越流行,云测试服务不能像Sauce Labs,BrowserStack,Perfecto这样的供应商不能忽视这一事实。 在上一篇文章中,我们看到了XCUITests的各种基于云的设备测试选项。 长期以来,Sauce Labs通过支持和维护Appium一直在帮助社区。 由于本机移动测试自动化框架(例如XCUITest和Expresso)开始流行,因此它们也必须转换齿轮并提供支持。 苹果于2015年推出了Xcode UI测试框架,最后,Sauce Labs支持在其真实设备云上执行这些UI测试。 Sauce Labs已在XCUITest和Real Device Cloud上广播了网络研讨会,以演示我们如何在云设备上设置XCUITest。 不幸的是,我无法参加实时网络研讨会,向主持人提问,但后来我观看了整个视频。 在这篇文章中,我将分享我对此过程的想法,以及可能会给Sauce Labs回答的一些问题。 流程 观看了XCUITest和Real Device Cloud上的整个网络研讨会之后,我了解了在Real Device Cloud上运行XCUITest的过程。 您可以在Sauce Labs Youtube频道上观看在线研讨会,也可以在下面观看。 我将留给您观看网络研讨会,现场演示并了解在Sauce Labs真实设备云上执行XCUITests的过程。 总而言之,该过程涉及以下步骤 使用Swift或Objective-C为iOS应用编写XCUITests 准备两个.ipa文件,一个用于您的主应用程序,另一个用于XCUITest运行器应用程序 使用Sauce Labs Web界面上传这些文件,以便Sauce Labs可以查看那些应用程序 使用设备标识符从Web界面中选择要在其上运行测试的设备 下载XCUITest Runner JAVA应用程序Runner.jar,该应用程序通过传递您的凭据来运行测试。 Java应用程序会将您的凭据,到IPA文件,设备,数据中心的路径作为参数,并触发对指定设备的测试。 然后,您可以查看测试结果,运行设备云的测试屏幕截图和视频。 您可以在上面显示的网络研讨会中看到所有这些工作,因此值得一试。 好处 在实际设备上运行XCUITest肯定有一些明显的好处。 由于iOS模拟器不涉及任何硬件接口。 一些好处是 来自真实设备的反馈非常有价值,因为这些是真实用户使用的设备。 可以选择最常用的设备并对它们并行运行测试 无需购买即可在一周内访问新推出的设备。 我们可以从具有hasipa资产的任何Linux或macOS Continuous […]

WWDC 2018 NativeDeveloper和DevOps Tools的愿望清单

最初在XCBlog上发布在 这里 苹果公司的全球开发者大会(WWDC 2018)将于下周的2018年6月4日拉开帷幕。令人遗憾的是,我们无法访问苹果的路线图,因此看到他们向我们展示的内容总是很令人兴奋。在WWDC中,除了一些开源项目(如Swift,程序包管理器和Swift NIO)外,Apple Github存储库中也提供了这些项目。 在这个WWDC中将要进行的演讲/会话也有悬念,在会议开始之前,我们无法看到演讲的标题。 当开发人员在Apple平台上工作时,每个人都希望有一些不错的东西,以便使我们的生活变得轻松。 几乎每个人的愿望清单上都有苹果工程师希望得到的东西。 MacRumors,Macworld,AppleInsider,PC Magazine等发布了有关主要软件或硬件的愿望清单,您可以在此处找到大量收藏,但是,在这篇文章中,我将有自己的愿望清单,以介绍我​​在Continuous领域一直想要的改进集成,持续交付,测试自动化,DevOps和Apple Developer工具。 这与Swift,XCTest,XCUITest,Xcode Server,BuddyBuild,Swift Package Manager等有关。 CI / CD:Xcode服务器+ BuddyBuild 苹果公司推出了自己的称为Xcode Server的持续集成解决方案,以便开发人员可以从Xcode创建机器人,然后在macOS服务器上运行。 在其他CI服务(例如Jenkins,TeamCity,TravisCI,CircleCI)上使用Xcode Server的优缺点。 我写了详细的利弊文章,您可以在这里阅读。 但是,Xcode服务器存在一些局限性,即不能将其用于更大的团队和测试请求请求。 您可以在我之前的博客文章中了解有关Xcode服务器的十大限制的更多信息。 好消息是,苹果现在购买了基于云的CI服务BuddyBuild。 这可能解决了大多数iOS开发难题。 希望苹果不会因为BuddyBuild而杀死Xcode Server。 我的愿望清单中的一些内容来自Xcode Server和BuddyBuild一起工作的团队。 1.不要杀死Xcode服务器 由于苹果购买了新供应商来处理与CI / CD相关的任务。 苹果有可能完全停止对Xcode Server的支持,并要求用户使用BuddyBuild的解决方案。 那将是一场噩梦,公司已经投入了金钱和时间来安装Xcode Server,而切换到其他解决方案将浪费时间和金钱。 仍然可以结合使用Xcode Server和BuddyBuild的功能。 假设Xcode Server用于自托管,而BuddyBuild用于基于云的CI解决方案。 2.对自托管Xcode服务器的请求请求支持 这是大多数开发人员或公司拒绝Xcode Server的唯一原因,因为它不支持测试请求请求。 Xcode现在已经与Github紧密集成,这可以在今年的WWDC中期待 3.从Xcode服务器自动上传到TestFlight 去年在WWDC 2017上,Apple通过许多新功能增强了Xcode Server。 您可以在此处阅读更多新功能,或在Safari上观看WWDC的Safari,这些功能增加了许多功能,使iOS应用程序的持续交付变得轻松。 但是,它错过了将生成的.ipa文件上传到iTunes […]

Swift — 4 —核心数据—第4部分编写单元测试用例

嗨,我回来了,我最喜欢的主题核心数据带有单元测试😀。 希望您对编写单元测试用例有一些基本的了解。 我们将使用XCTestCase类和XCTest框架来编写单元测试并对其进行测试。 源代码在本教程的底部。 单元测试对于测试代码非常有用,而无需在设备或模拟器上启动代码并转到特定的视图控制器。 我们可以非常快速地测试所需的代码,而无需在设备/模拟器上运行。 它将节省大量的开发时间。 一旦您采用了单元测试,它将激发您按照MVVM,依赖注入和适配器模式等编写小的可测试代码。 我将继续第3部分。请从此处下载第3部分源代码。 我在CoreDataManager类中添加了另一个方法。 只需复制以下方法并粘贴到CoreDataManager类中即可。 此方法使用获取请求来获取个人记录并删除它们。 / *在需要刷新人员数据的情况下,可以调用此方法* / func flushData(){ 让fetchRequest:NSFetchRequest = NSFetchRequest (实体名称:“人”) 让objs =试试! CoreDataManager.sharedManager.persistentContainer.viewContext.fetch(fetchRequest) 例如,让obj作为objs中的NSManagedObject { CoreDataManager.sharedManager.persistentContainer.viewContext.delete(obj) } 尝试! CoreDataManager.sharedManager.persistentContainer.viewContext.save() } } 现在,让我们开始设置单元测试: 我们还需要在测试目标中添加PersonData.xcdatamodeld。 请参考所附的屏幕截图,并仔细查看右侧底部的Target Membership: 让我们复制下面的代码,并将其粘贴到PersonDataTests.swift中。 它看起来应该像这样: // // PersonDataTests.swift // PersonDataTests // //由Alok Upadhyay在18/3/28创建。 //版权所有©2018 Alok。 版权所有。 // 导入XCTest 导入CoreData @testable导入PersonData class PersonDataTests:XCTestCase […]