我从未使用过单元测试,虽然我知道它的用途,但不确定何时以及如何使用。
我想了解什么情况下值得使用单元测试,并且希望有一些示例。
我从未使用过单元测试,虽然我知道它的用途,但不确定何时以及如何使用。
我想了解什么情况下值得使用单元测试,并且希望有一些示例。
其他答案讲述了何时进行单元测试,但没有真正说明如何进行,因此让我也添加一个答案。
任何时候,当您编写要保留的生产代码时,都应该对其进行单元测试。我看过的最有帮助的培训是以下这个由两个部分组成的视频系列:
前五分钟左右只是介绍,所以你可以跳到结尾。
我正在使用带有Swift的Xcode 7。
开始一个新项目并添加一个单元测试。
我把我的项目称为MyProject
。 如果您在项目导航器中打开MyProjectTests
组,您将看到Xcode已经为您创建了一个名为MyProjectTest.swift
的单元测试文件。
您暂时可以删除所有示例方法,然后添加一个新的func
来测试自己的类方法。请确保在顶部添加@testable import MyProject
这一行。如果您的项目名称中有空格,请将空格替换为下划线。(例如,“My Example Project”将使用 @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
添加一个名为MyClass
的Swift文件。
class MyClass {
func sum(a: Int, _ b: Int) -> Int {
return a + b
}
}
点击测试单元类或方法旁边的测试按钮以再次运行测试,此时它应该通过。
为了看到它失败(单元测试的重要部分),您可以在MyClass
的sum
方法中做一些类似于return 0
的事情。然后当您运行测试时,您将看到以下内容:
您可以返回并修复这个问题,然后添加更多单元测试。如果需要,您还可以为不同的类制作其他单元测试文件。只需右键单击项目导航器中的MyProjectTest
组,然后选择“新建文件”,然后选择“测试用例类”即可。
0
,运行测试并观察其失败,修复该方法,然后再次运行测试并观察其通过。不过我的句子有点混乱,所以我刚刚将其删除了,因为TDD并不是这个答案的主题。 - Suragch你几乎总是应该进行单元测试,并且编写代码时应该考虑单元测试。 极端情况下,人们会在编写代码之前编写测试(这被称为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,它是苹果测试UI的方式。虽然不完美,但还是相当不错的。这里有一个优秀的教程。
如果你认为自己是一名优秀的程序员,应该为你的代码编写单元测试。
每当您编写一个包含不属于自己的类的应用程序时,这是一个很好的时机来添加单元测试以测试这些类。
除了最基本的应用程序外,其余的应用程序都会有自己的类,因此几乎总是一个很好的想法来进行单元测试。
如果您正在创建其他程序员将使用或者您将在多个项目中使用的库,则应始终进行单元测试。
单元测试可以节省大量时间,特别是当一些东西发生变化时。例如,当操作系统的新版本发布时,与其仅测试应用程序,还不如使用单元测试进行测试。