我从未使用过单元测试,我理解它的用途,但我不知道何时以及如何使用它。
我想知道何时值得使用单元测试,可能还有一些例子。
答案 0 :(得分:15)
其他答案告诉何时但不是如何,所以我也要添加一个答案。
每当您编写要保留的生产代码时,都应该对其进行单元测试。我在这看到的最有用的培训是以下两部分视频系列:
前五分钟左右只是介绍,所以你可以跳到最后。
我正在使用Xcode 7和Swift。
启动新项目并添加单元测试。
我打电话给我MyProject
。如果在Project Navigator中打开MyProjectTests组,您将看到Xcode已经为您创建了一个名为MyProjectTest.swift的单元测试文件。
您可以暂时删除所有示例方法,并添加新的func
来测试您自己的类方法。请务必在顶部添加第@testable import MyProject
行。如果项目名称中包含空格,则用下划线替换空格。 (例如,“我的示例项目”将使用@testable import My_Example_Project
。)
我遵循testMethodNameBeingTested_Senario_ExpectedBehavior
的命名模式。单元测试名称必须以“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)
}
}
当然,构建失败是因为我们还没有添加MyClass
类。
添加课程。
我正在向名为MyProject
的{{1}}添加一个Swift文件。
MyClass
按下测试单元类或方法旁边的测试按钮再次运行测试,它应该通过。
要查看它失败(单元测试的一个重要部分),您可以在class MyClass {
func sum(a: Int, _ b: Int) -> Int {
return a + b
}
}
return 0
方法中执行sum
之类的操作。然后在运行test时会看到以下内容:
您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,还可以为不同的类创建其他单元测试文件。只需右键单击Project Navigator中的MyProjectTest组,然后选择“New File”,然后选择Test Case Class。
答案 1 :(得分:13)
您应该几乎总是进行单元测试,并且应该考虑单元测试编写代码。 极端分子甚至在编写代码之前编写测试(称为TDD - 测试驱动开发)。
我将给你一个真实的例子:我最近不得不编写一个支持“间隔”的已排序的NSArray。意思是,数组应该知道如何插入一个区间并保持它的排序。
例如,数组看起来像这样:[1-3,5-9,12-50]。在此示例中,数组中有3个间隔,您可以看到它们已排序。 在我写完课程后(我称之为IntervalsArray),我 HAD 编写测试以确保它正常工作,如果我或其他人对代码进行更改,我将不会“破坏”它在将来。
以下是一些示例测试(伪代码):
测试1:
- Create a new IntervalsArray
- Insert a new interval to the array
- (TEST) make sure the array has 1 object in it
测试2:
- 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次测试,以涵盖新阵列的各个方面。
这是good unit-testing with Xcode tutorial。
您还可以编写逻辑测试(比单元测试更复杂)来测试UI。阅读一下UIAutomation,这是Apple测试UI的方式。它并不完美,但它非常好。关于此事Here's an excellent tutorial。
如果你认为自己是一名优秀的程序员,你应该为你的代码编写单元测试。
答案 2 :(得分:3)
在编写必须维护的代码时编写单元测试。也就是说,如果你想重构任何东西 - 改变代码但保持行为。这几乎是生产代码的每一点。
“Hello,World”的反例并不是要打扰你打算抛弃的代码。 “尖峰解决方案”只是为了弄清楚如何解决问题。一旦你弄明白了,扔掉它然后重新开始。只有这一次,你才开始测试。
称TDD为“极端分子”使其听起来不合理且不切实际。事实上,一旦你学习了TDD,它就可以节省时间/金钱。
有关TDD如何工作的示例,请参阅Unit Testing Example with OCUnit。
答案 3 :(得分:1)
任何时候你编写一个包含类的应用程序,而不是你自己的类。这是添加单元测试以测试这些类的好时机。
除了最基本的应用程序之外的所有应用程序都有自己的类,因此单元测试几乎总是一个好主意。
如果您正在创建其他程序员将使用的库,或者您将在多个项目中使用的库,则应始终进行单元测试。
当事情发生变化时,单元测试可以节省大量时间,例如,新版本的操作系统出现,使用单元测试进行测试然后测试应用程序要好得多。