我从未使用过单元测试,我了解它的用途,但我真的不知道何时以及如何使用它。
我想知道什么时候值得使用单元测试,也许有一些例子。
我从未使用过单元测试,我了解它的用途,但我真的不知道何时以及如何使用它。
我想知道什么时候值得使用单元测试,也许有一些例子。
其他答案告诉何时但不是真的如何,所以让我也添加一个答案。
每当您编写要保留的生产代码时,都应该对其进行单元测试。我在这方面看到的最有用的培训是以下两部分视频系列:
前五分钟左右只是介绍,因此您可以跳到结尾。
我将 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
类。
添加你的班级。
我正在将 Swift 文件添加到MyProject
被调用的MyClass
.
class MyClass {
func sum(a: Int, _ b: Int) -> Int {
return a + b
}
}
按测试单元类或方法旁边的测试按钮再次运行测试,它应该通过。
要看到它失败(单元测试的一个重要部分) ,您可以return 0
在sum
. MyClass
然后你会在运行测试时看到以下内容:
您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,您还可以为不同的类制作其他单元测试文件。只需右键单击 Project Navigator 中的 MyProjectTest 组并选择“New File”,然后选择 Test Case Class。
您几乎应该总是进行单元测试,并且您应该在编写代码时考虑到单元测试。极端分子甚至在编写代码之前就编写测试(称为 TDD - 测试驱动开发)。
我会给你一个真实的例子:我最近不得不编写一个支持“间隔”的排序 NSArray。意思是,数组应该知道如何插入一个区间并保持排序。
例如,数组看起来像这样:[1-3, 5-9, 12-50]。在这个例子中,数组中有 3 个区间,如您所见,它们已排序。在我编写完我的类(我称之为 IntervalsArray)之后,我必须编写测试以确保它正常工作,并且如果我或其他人将来对代码进行更改,我不会“破坏”它。
以下是一些示例测试(伪代码):
测试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 个测试来涵盖新阵列的各个方面。
这是一个很好的 Xcode 单元测试教程。
您还可以编写逻辑测试(比单元测试更复杂)来测试您的 UI。阅读一些关于 UIAutomation 的内容,这是 Apple 测试 UI 的方式。它并不完美,但它非常好。这是一个很好的教程。
如果你认为自己是一个优秀的程序员,你应该为你的代码编写单元测试。
每当您编写必须维护的代码时,都要编写单元测试。也就是说,如果你想重构任何东西——改变代码但保持行为。这几乎是所有生产代码。
“Hello, World”的反例是不要打扰你打算丢弃的代码。“尖峰解决方案”只是为了弄清楚您如何解决问题。一旦你弄清楚了,就把它扔掉,然后重新开始。只有这一次,您从测试开始。
将 TDD 称为“极端主义”听起来不合理且不切实际。事实上,一旦你学会了 TDD,它就可以节省时间/金钱。
有关 TDD 如何工作的示例,请参阅使用 OCUnit的单元测试示例。
任何时候你编写一个有类的应用程序,这不是你自己的。这是添加单元测试、测试这些类的好时机。
除了最基本的应用程序之外,所有应用程序都有自己的类,因此单元测试几乎总是一个好主意。
如果您正在创建其他程序员将使用的库,或者您将在多个项目中使用的库,那么这些库应该始终具有单元测试。
当事情发生变化时,单元测试可以为您节省大量时间,例如,新版本的操作系统问世,使用单元测试进行测试比只测试应用程序要好得多。