无论何时编写需要维护的代码,都要编写单元测试。也就是说,如果你想重构任何东西——修改代码,但保留行为。这几乎是生产代码的每一部分。
“你好,世界”的反例是不要费心于你计划扔掉的代码。“峰值解决方案”只是为了弄清楚你可能如何处理一个问题。一旦你弄清楚了,就扔掉它,重新开始。只是这一次,你从测试开始。
称TDD为“极端主义者”听起来不合理和不切实际。事实上,一旦你学会了TDD,它就节省了时间/金钱。
有关TDD如何工作的示例,请参阅使用OCUnit的单元测试示例。
您几乎应该总是进行单元测试,并且应该在编写代码时考虑单元测试。极端分子甚至在编写代码之前就编写测试(称为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的方式。它不完美,但很好。这里有一个关于这个的优秀教程。
如果你认为自己是一个优秀的程序员,你应该为代码编写单元测试。
其他答案告诉我们什么时候,但不知道如何,所以让我也补充一个答案。
无论何时编写要保留的生产代码,都应该对其进行单元测试。我在这方面看到的最有用的培训是以下两部分视频系列:
前五分钟左右只是介绍,你可以跳到最后。
我使用的是Xcode 7和Swift。
启动新项目并添加单元测试。
我打电话给我的MyProject
。如果在项目导航器中打开MyProjectTests组,您将看到Xcode已经为您创建了一个名为MyProjectTest的单元测试文件。敏捷的
现在可以删除所有示例方法,并添加一个新的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
添加一个名为MyClass
的Swift文件。
class MyClass {
func sum(a: Int, _ b: Int) -> Int {
return a + b
}
}
按测试单元类或方法旁边的测试按钮再次运行测试,测试应该通过。
要看到它失败(单元测试的一个重要部分),可以在MyClass
的sum
方法中执行类似于return 0
的操作。然后,在运行测试时,您将看到以下内容:
您可以返回并修复此问题,然后添加更多单元测试。如果您愿意,您也可以为不同的类制作其他单元测试文件。只需右键单击项目导航器中的MyProjectTest组,然后选择“新文件”,然后选择测试用例类。
Xcode用户界面测试示例
我有一个混合了objective-c和Swift的项目,我试图为它编写单元测试。我的项目名称是:Alphaproject我的产品模块名称是:Alphaproject我在我的主要目标(Alphaproject)中设置为YES Defines module,并设置为YES EnableTestability,以便仅在此同一目标中进行调试。 在我的测试类中,我尝试导入我的产品模块名称: @可测试导入项目
单元测试涉及测试软件应用程序的每个单元或单个组件。这是第一级软件测试。单元测试的目的是验证单元组件的性能。 单元是软件系统的单个可测试部分,并在应用程序软件的开发阶段进行测试。 此测试旨在测试隔离代码的正确性。单元组件是应用程序的单独功能或代码。白盒测试方法用于单元测试,通常由开发人员完成。 在测试级别层次结构中,单元测试是在集成和其他剩余测试级别之前完成的第一级测试。它使用模块进行测试,减少了等
单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进
我们从 Hello World 项目入手,增加单元测试功能。 我们新家了一个名为hello-world-test的 Gradle 项目。 环境 Gradle 3.4.1 Spring Boot 1.5.2.RELEASE Thymeleaf 3.0.3.RELEASE Thymeleaf Layout Dialect 2.2.0 Spring Security Test 4.2.2.RELEASE
单元测试验证单个代码单元是否按预期工作。 也就是说,给定不同的输入参数, 测试验证类方法返回预期结果。 单元测试通常由编写待测试类的人开发。 Yii的单元测试框架 Codeception 基于 PHPUnit,Codeception 建议遵从 PHPUnit 的文档的进行开发: Codeception for Yii framework Codeception Unit Tests PHPUnit
单元测试 ClojureScript 的测试和 Clojure 语法类似, 通过 cljs.test 来提供. 首先需要引用下面这些函数或者 Macros: (ns my-project.tests (:require [cljs.test :refer-macros [deftest is testing run-tests]])) 然后可以定义一个测试: (deftest test-num