您的意见不够愚蠢吗? —一种无需模拟器即可运行测试的方法

嗨! 如您所见,这篇文章的标题由两部分组成。 “ 您的观点足够愚蠢 ”是指在项目中的类之间管理代码,这确实是一个有趣的话题,但是还有第二部分-“ 一种无需模拟器即可运行测试的方法 ”。 管理代码是非常简单的主题,您可能知道这部分的内容,但是我如何在没有模拟器的情况下运行测试? 我们不是真的需要模拟器来测试应用程序吗? 原来不是!

您的意见不够愚蠢吗?

这是一个简单的模型,将存储有关一个人的信息。

这里的问题是我们的观点对正在发生的事情了解太多! 我们如何改变它? 让我们看一下MVVM模式,它将使我们可以将这些知识转移到另一个地方。
您可以在此处找到有关架构模式的更多信息

使视图变得愚蠢是获得更易于测试的更干净代码的好方法。 现在,我们可以轻松地测试ViewModel,以查看它们是否按预期工作。 由于我们的业务逻辑与布局分离,这一切皆有可能!

一种更快运行测试的方法!

您可能已经注意到,每次为iOS应用程序运行测试目标时,也会启动一个模拟器。 一段时间后您就习惯了,没关系。 只需要更长的时间。 而且我们还是必须运行模拟器……还是我们?
为什么每次运行测试都会启动模拟器?
好吧……我们需要UIKit ,它是我们应用程序中的依赖项。 UIKit是iOS特定的库。
但是我们的逻辑代码中不再有UIKit了,对吗?
这是否意味着我们应该能够在无需启动模拟器的情况下测试应用程序逻辑?

答案是肯定的!

最近,我开始考虑将大型项目介绍给许多较小的框架。 如果我的逻辑没有紧密结合,那么这应该不是什么大问题,如果您有这种区分,那么代码编写的可能性就很高。 如果我的小框架不依赖UIKit怎么办? 我可以轻松地在不同的平台(如iOS,MacOS等)上重用它们。这也是一种可用于测试这些框架的方法。

如果可以在MacOS上使用框架,那么您也可以在那里进行测试! 这意味着您不再需要模拟器!

我们如何准备针对iOS和MacOS的框架? 在下面,您将找到有关如何创建跨平台框架的文章。

这是Anthony Colangelo的“ Xcode跨平台框架”的链接

使用逻辑创建框架之后,剩下要做的是:

  1. 创建OSX单元测试套件的目标
  2. 作为要测试的目标,请选择以MacOS为目标的框架

做完了!

通过为应用程序的业务逻辑建立单独的框架,我们获得了:

  1. 无需启动模拟器即可测试逻辑的能力
  2. 不同平台之间的可重用代码
  3. 更清晰的代码,在部分中更易于理解

结论

我相信,这种结构化代码的方式可以使您受益匪浅,并且可以使代码和测试更加简洁,而无需花费很多时间来运行。 我想与您分享的一种在没有模拟器的情况下运行测试的方法对我来说是一种“概念证明”。 我愿意在战场上尝试更多,并观察其适用性。

您如何解决这些问题? 您是否有以这种方式进行测试的经验? 如果您在下方的评论栏中分享我很高兴😉

本文与我的个人博客www.eliaszsawicki.com交叉发布

可以在我的github上找到概念证明项目:https://github.com/Eluss/NoSimulatorUnitTests