XCodeunit testing

我从来没有使用unit testing,我理解它的用途,但我不知道何时以及如何使用它。

我想知道什么时候使用unit testing是值得的,也许有一些例子。

你几乎总是应该进行unit testing,并且应该用unit testing来编写代码。 甚至在编写代码之前,极端主义者都会写testing(这就是所谓的TDD – testing驱动开发)。

我会给你一个真实的例子:我最近不得不编写一个支持“间隔”的sortingNSArray。 意思是,数组应该知道如何插入一个间隔并保持sorting。

例如,数组看起来像这样:[1-3,5-9,12-50]。 在这个例子中,数组中有3个区间,你可以看到它们被sorting。 在我写了我的类(我称之为IntervalsArray)之后,我必须编写testing以确保它能正常工作,并且如果我或其他人在将来更改代码时不会“破坏”它。

以下是一些示例testing(伪代码):

testing1:

- Create a new IntervalsArray - Insert a new interval to the array - (TEST) make sure the array has 1 object in it 

testing2:

 - Create a new IntervalsArray - Insert 2 intervals into the array: [1-3] and [5-9] - (TEST) make sure there are 2 items in the array - (TEST) make sure interval [1-3] comes before interval [5-9] 

最后,我有15个testing来覆盖我的新arrays的每个方面。

这是Xcode教程的一个很好的unit testing 。

你也可以编写逻辑testing(比unit testing更复杂)来testing你的用户界面。 阅读一下UIAutomation,这是苹果testingUI的方式。 这不是完美的,但很好。 这里有一个很好的教程 。

如果你认为自己是一个好的程序员,你应该为你的代码编写unit testing。

其他答案告诉什么时候,但不是如何 ,所以让我也添加一个答案。

什么时候

任何时候你正在编写你将要保留的产品代码,你应该有它的unit testing。 我看到的最有帮助的培训是以下两部分video系列:

  • 了解testing驱动开发 (第1部分)
  • Roy Osherove的unit testing最佳实践 (第二部分)

前五分钟左右只是介绍,所以你可以跳到最后。

怎么样

我正在用Swift使用Xcode 7。

开始一个新的项目,并添加一个unit testing。

我打电话给我的MyProject 。 如果你在Project Navigator中打开MyProjectTests组,你会看到Xcode已经为你创build了一个名为MyProjectTest.swift的unit testing文件。

在这里输入图像说明

您可以暂时删除所有的示例方法,并添加一个新的func来testing您自己的类方法。 确保在顶部添加@testable import MyProject行。 如果您的项目名称中有空格,请用下划线replace空格。 (例如,“我的示例项目”将使用@testable import My_Example_Project 。)

我正在遵循testMethodNameBeingTested_Senario_ExpectedBehavior的命名模式。 unit testing名称必须以“test”开头。

我会做这样的事情:

 import XCTest @testable import MyProject class MyProjectTests: XCTestCase { func testSum_TwoNumbers_ReturnsSum() { // Arrange (set up the needed objects) let myClass = MyClass() // Act (run the method you want to test) let sum = myClass.sum(1, 2) // Assert (test that the behavior is as expected) XCTAssertEqual(sum, 3) } } 

当然,构build失败,因为我们还没有添加MyClass类。

添加你的class级。

我正在向MyProject添加一个名为MyClass的Swift文件。

 class MyClass { func sum(a: Int, _ b: Int) -> Int { return a + b } } 

如果我真的遵循TDD原则,我只会添加函数名称,而不是返回正确的值。 但是为了简洁起见,我现在就来谈谈整个方法。

按testing单元类或方法旁边的testingbutton再次运行testing,它应该通过。

要看到它失败(unit testing的重要组成部分),你可以做一些像MyClasssum方法return 0 。 那么当你运行testing时你会看到以下内容:

在这里输入图像说明

你可以回去修复这个,然后添加更多的unit testing。 如果你愿意,你也可以为其他的unit testing文件。 只需右键单击Project Navigator中的MyProjectTest组,然后select“New File”,然后selectTest Case Class。

在这里输入图像说明

有关

Xcode UItesting示例

编写unit testing时,你写代码,你将不得不维护。 也就是说,如果你想重构任何东西 – 改变代码,但保持行为。 这几乎是每一个生产代码。

“你好,世界”的反例是不打扰你打算扔掉的代码。 “秒杀解决scheme”就是要弄清楚如何解决问题。 一旦你知道了,扔掉它,然后重新开始。 只有这一次,你从testing开始。

称TDD为“极端主义”使其听起来不合理和不切实际。 事实上,一旦你学习TDD,它可以节省时间/金钱。

有关TDD如何工作的示例,请参见OCUnit的unit testing示例 。

任何时候你写一个有类的应用程序,这不是你自己的。 现在是添加unit testing的好时机,来testing这些类。

除了最基本的应用程序之外,其他所有应用程序都会有自己的类,所以它几乎总是一个unit testing好主意。

如果您正在创build其他程序员将使用的库,或者您将在多个项目中使用这些库,则应始终进行unit testing。

unit testing可以在事情发生变化时为您节省大量时间,例如,新版本的操作系统出来了,用unit testingtesting然后testing应用程序会好得多。