在我们以前的职位在设置XCUITest框架时,我们用Xcode 10建立并运行了一个示例XCUITest。Apple的XCUITest框架使我们能够记录基本的用户行程,从而开始使用XCUITest,但是所记录的测试不具有可伸缩性和可重用性。我们必须努力提高XCUITest的可读性、可伸缩性、可维护性和可重用性。
按照上一篇文章中提到的方法,我们可以添加更多的UI测试,但是会有大量的代码重复,这会使我们的UI测试很难维护和修复。编写自动化测试非常容易,但随着项目的规模和复杂性的增加,编写可靠的测试更加困难。有各种测试方法和测试模式可用于使测试具有可伸缩性。在这篇文章中,我们将介绍如何通过抽象基类中常见的SWIFT代码使XCUITest测试变得健壮。
为XCUITest测试创建一个基类
大多数测试框架使用基类抽象测试类的公共功能。简而言之,基类是为测试类提供公共功能的超类。在我们XCUITest101Xcode项目,我们有一个ui测试类。XCUITest101UITests.swift在一个类中使用所有的方法,比如安装、解压缩和测试方法。如果我们想要添加新的XCUITest测试,那么我们必须重复每个测试类的设置和拆卸方法。显然,这将在我们的IOS项目中创建大量重复的代码,这使得以后很难维护,并且可能会延长您在移动设备云上的测试执行时间。为了避免这种情况,让我们从Xcode->File->New->File->Swift File->Next并将文件命名为XCUITestBase,并确保为该文件选择了目标XCUITest101UITest。
这将创建一个新文件。XCUITestBase.swift在UI测试目标下,我们可以抽象出通用代码。
通用测试工作流
现在我们已经为XCUITest创建了基类,我们可以考虑我们可以在基类中包含的常见和重复的代码。查看我们现有的测试类XCUITest101UITEST,我们可以在基类中抽象如下内容:
设置和测试方法
的实例XCUIApplication()这在以后的测试中可能需要。
这两个是非常明显的东西,我们必须抽象化,以便以后再使用。然而,随着项目和测试套件的增长,将来可能需要抽象更多的通用工作流。在编写XCUITest测试时,必须在能够可靠运行测试的状态下配置我们的应用程序。苹果提供了启动参数和发射环境传递给每个测试类。配置从基类添加启动参数的能力是有意义的。一个很好的例子是,当我们希望使用启动参数从干净的状态启动每个测试时。
XCUIApplication().launchArguments = ["-StartFromCleanState", "YES"]
这是一个启动参数的例子,但是您可以传递由IOS开发人员创建的任何参数或环境。我们可以在基类中配置它,还可以将基类扩展到XCTestCase班级,等级最后,我们XCUITestBase类看起来像这,这个:
现在我们已经创建了基类,接下来的任务是修改我们的测试。XCUITest101UITest到基类的子类,并使用来自超类的常用方法。
重构UI测试以使用基类
为了重构我们的原著XCUITest101UITest,我们可以采取以下几项行动:
我们不需要记录测试,所以,首先,让我们去掉testRecorded()我们班的考试。
接下来,我们可以重命名我们的测试方法。testRefactored()用更明智的方法。在验证欢迎消息时,让我们将这个测试重命名为testWelcomeMessage()
我们必须将测试的超类替换为XCTestCase到XCUITestBase这样我们就可以使用基类中的所有公共工作流。
替换XCUIApplication()到app从基类。
完成上述步骤后,我们的测试类将如下所示这,这个:
现在我们的测试类看起来好多了,更整洁了。通过使用基类,我们将30+行的源代码减少到了8行。如果使用CMD+U关键,你会看到我们的测试仍然通过,没有任何问题。您可以从调试区,它通常是用CMD+Shift+C(??C)在Xcode 10中输入键。在我们的测试中,当测试在模拟器中运行时,日志如下所示:
最后,您可以看到测试将断言欢迎消息并通过。
你自己试试看
本教程的源代码可在baseclass支部这里。您可以自己下载源代码并在Xcode 10中运行测试。在命令行中,您可以获得如下源代码:
$ git clone https://github.com/Shashikant86/XCUITest101
$ cd XCUITest101
$ git checkout baseclass
$ open XCUITest101.xcodeproj/
项目在Xcode 10中打开后,请按CMD+U运行XCUITest。
结语
在这篇文章中,我们抽象了基类中XCUITest的通用代码,以避免重复。然而,要使我们的测试具有可伸缩性和真正的可重用性,仍然需要很多改进。我们将在即将发布的文章中将SWIFT最好的测试模式应用于我们的XCUITest。请继续关注。
原文地址:http://blog.51cto.com/14009535/2301421