k20*_*k20 13 iphone unit-testing objective-c ios
我从来没有使用过单元测试,我理解它的用途,但我真的不知道何时以及如何使用它.
我想知道什么时候使用单元测试是值得的,也许有一些例子.
Sur*_*gch 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)
}
}
Run Code Online (Sandbox Code Playgroud)
当然,构建失败是因为我们还没有添加MyClass
类.
添加你的课程.
我正在添加一个Swift文件来MyProject
调用MyClass
.
class MyClass {
func sum(a: Int, _ b: Int) -> Int {
return a + b
}
}
Run Code Online (Sandbox Code Playgroud)
如果我真的遵循TDD原则,我只会添加函数名称,而不是返回正确的值.但为简洁起见,我现在只对整个方法.
按下测试单元类或方法旁边的测试按钮再次运行测试,它应该通过.
要看到它失败(单元测试的重要组成部分),你可以做类似return 0
的sum
方法MyClass
.然后,当您运行test时,您会看到以下内容:
您可以返回并修复此问题,然后添加更多单元测试.如果您愿意,还可以为不同的类创建其他单元测试文件.只需右键单击Project Navigator中的MyProjectTest组,然后选择"New File",然后选择Test Case Class.
Eli*_*nem 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
Run Code Online (Sandbox Code Playgroud)
测试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]
Run Code Online (Sandbox Code Playgroud)
最后,我有15个测试来覆盖我的新阵列的每个方面.
这是一个很好的单元测试与Xcode教程.
您还可以编写逻辑测试(比单元测试更复杂)来测试UI.阅读一下UIAutomation,这是Apple测试UI的方式.它并不完美,但它非常好.这是关于此的优秀教程.
如果你认为自己是一个优秀的程序员,你应该为你的代码编写单元测试.
归档时间: |
|
查看次数: |
9643 次 |
最近记录: |