XCODE 单元测试指南

(for xcode4.2,ios sdk 5.0 and mac os x 10.7)
这是关于xcode单元测试的一份较新的官方文档,地址为:https://developer.apple.com/libr ... /TP40002143-CH1-SW1

因为有朋友需要用到单元测试,所以翻译一下,同时也给需要的人。。。 


关于单元测试
单元测试是一种方法,用来确保你写的代码遵守设计说明书,并在你编辑代码后仍然和设计说明书保持一致。单元测试能够帮助你写出强壮和安全的应用。单元测试的关键组件是一个测试用例,测试用例在最低可测试的级别或单元对你的代码进行测试。

概览
这篇文档描述了如何在头脑中创建带有单元测试的产品,以及如何将单元测试加入倒现有的工程中。
这篇文档是为以下环境而写:
1.XCODE 4.2
2.IOS SDK 5.O
3.MAC OS X SDK 10.7

将单元测试加入到一个工程中
为了单元测试你的代码,你的工程必须包含单元测试束。这些程序束包含了测试方法,这些方法在一个库或者应用中执行代码,以确保其行为正确。

章节:“在工程中设置单元测试”

写测试用例
一个测试用例方法调用代码的一个单元(一个或多个方法或函数)来确保它以测试用例期待的方式执行,比如返回特定值或者抛出异常。一个测试用例方法报告测试用例是否通过。

章节:“写测试用例方法”

运行单元测试
运行单元测试以确保你刚刚写的或者编辑的代码以期待的方式执行。

章节:“运行单元测试”

前提
你应该熟悉应用设计和编程概念。你也应该明白“APP STORE开发”中描述的概念。

单元测试概述
单元测试能够让你指定你的代码必须遵守的行为,确保你在编辑代码后确保其功能保持不变,例如在做性能改进或修复BUG之后。一个代码单元是你代码中能够被测试的最小单元--比如说类的一个方法或者一组为了达成重要目的的方法集。一个测试用例(test case)以指定的方式检查代码单元;如果测试的结果和预期结果不一致,则测试用例失败。一个测试集(test suite)由一组测试用例组成。你可以开发一个或多个测试集来测试你代码的不同方面。

单元测试是测试驱动开发的基础,测试驱动开发是一种写代码的方式,这种方式中你要在写被测试代码之前写出测试用例。这种开发方式在你开始编程之前,为你的代码规范化需求,并给出用例边界。在写完测试用例之后,你为了通过这些测试用例而写你的算法。在代码通过这些测试用例之后,你有了可以优化你代码的基础,你很有信心,任何改动(将导致产品中出现BUG)将在下次运行测试时被识别。

即使不用测试驱动开发,单元测试也能够帮助你减少你的代码中引入的BUG。你可以将单元测试加入到一个工作中的应用里,来确保以后的修改不会改变应用的行为。当你修改BUG时,你可以增加测试用例来确信BUG真的被修复了。但是,直接为工程添加测试用例,而不是事先在头脑中用单元测试进行设计,可能需要重新设计或者重构代码的局部,来让他们变得可测试。

XCODE单元测试环境是基于SenTestingKit开源框架的。这个框架提供了一组类和命令行工具,使你能够设计测试集并在代码上运行他们。

XCODE提供了两类单元测试:逻辑测试和应用测试。

1.逻辑测试
这些测试由代码单元自己(而不是在应用中)检查正确的功能性。通过逻辑测试,你可以将特定的测试用例集合在一起,来检查一个代码单元。你也可以使用逻辑测试对你的代码进行压力测试,确保它在不太可能发生的极端情况下行为正确。这些测试帮助你生产强壮的代码,这些代码在你没有预期的情况下仍然可以运行无误。

IOS:逻辑测试只能在模拟器上运行。

2.应用测试
这些测试在你的应用环境中检查代码单元。你可以使用应用测试来确保你的用户界面控件(输出口变量和动作)的连接保持不变,还能确保你在写你的应用时,控件和控制器对象和对象模型之间正确的工作。你也可以使用它进行硬件测试,比如获得你的程序运行时设备的位置。

=======================================================================================
在项目中设置单元测试
你使用逻辑单元测试来对代码进行彻底的高度定制的测试。用应用程序单元测试,你测试在模拟器或设备上运行的代码,测试可以访问MAC应用中COCOA框架中的可用资源,或者IOS应用中COCOA TOUCH框架里的可用资源。单元测试的目标,可以在你的代码执行逻辑单元测试,或在你的应用上执行应用程序单元测试。

配置一个工程或者目标中的单元测试最方便的时机是在你创建他们的时刻。如果你在创建工程或目标时选择了“Include Unit Test”选项,XCODE会在构建那个工程的方案中加入一个单元测试目标。对于应用,单元测试目标实现了应用程序单元测试。对于所有其他的产品类型,单元测试目标事先了逻辑单元测试。

当你在工程方案上执行测试命令时,该方案的测试行为可以识别XCODE执行的测试集。为了在现有项目上实现单元测试,你要添加一个或多个单元测试目标到该项目上。

IOS:因为XCODE不能在基于IOS的设备上执行逻辑单元测试,你应该为执行他们而配置特定的方案。

这部分描述了如何为工程添加一个单元测试目标。



为你的工程添加单元测试目标
单元测试目标定义了一个或多个测试集

注意:不管你想目标执行什么样的单元测试类型,这些指令将产生一个实现了逻辑单元测试的单元测试目标。参考“设置应用程序单元测试”,来查找将逻辑单元测试目标修改为应用程序单元测试目标的指令。

为了向工程添加单元测试目标:
1. 打开你想添加单元测试目标的工程
2.选择File>New>New Target
3.为你的平台选择单元测试束模版(bundle template):
      IOS:在IOS区域,选择other,然后选择Cocoa Touch Unit Testing Bundle模板。
      MAC:在MAC OS X区域,选择other,然后选择Cocoa Unit Testing Bundle模板。



4.点击NEXT
5.指定下面的单元测试目标选项:
    product name: 输入目标的工程名字,来标识你希望目标执行的单元测试类型,需要包含"Tests"后缀(例如,MyAppLogicTests, MyAppApplicationTests)。
   你可以对目标使用任何名字,但这有助于包含你希望目标执行的单元测试类型,事实上目标执行了单元测试。

    project:选择你想要添加单元测试目标的工程。



6.点击Finish.
在添加完单元测试目标后,工程导航器中显示了一个新的组--和目标同名--它有实现了临时测试用例的源文件新目标在工程的目标列表中列出。



如果XCODE为你自动创建方案,那方案工具条菜单上就多了个新方案--它和单元测试目标同名。这个方案中,你可以运行作为单元测试目标组成部分的测试用例。新方案的Test行为标识了单元测试目标,并列出了方案运行的测试集和测试用例。



通过为目标增加一个objective-c测试用例类,你可以为单元测试目标添加测试集。

注意:单元测试目标只能执行一种类型的单元测试,逻辑的或者应用程序的,二者不可兼顾。

===================================================================================

逻辑单元测试的设置
如果你通过上一节的方法为工程添加了一个单元测试目标,那么被添加的目标已经被设置为执行逻辑测试了。

下面是设置执行逻辑测试的单元测试目标的步骤:
1.在工程编辑器中,选择你想要设置的单元测试目标,显示Build Settings面板。
2.在Build Settings面板的范围工具条,点击All。
3.在搜索框内,输入bundle loader,按回车。
4.如果Bundle Loader以粗体显式,选择它,然后按删除键。
5.在搜索框内,输入test host,按回车。
6.如果Test Host以粗体显式,选择它,然后按删除键。

为了确定单元测试目标被正确的配置为执行逻辑测试:
1.从Scheme工具条菜单,选择单元测试方案并运行目标:

IOS:对于逻辑测试,运行目标只能是模拟器。



2.选择Product > Test。
3.选择选择View > Navigators > Issue,显示问题导航器。
    问题导航器会列出失败的临时测试用例,表明单元测试目标工作正常。



4.选择 View > Navigators > Show Log Navigator 显示日志导航器。
5.在日志导航器的动作列表中(窗口左侧),选择以单元测试目标命名的测试运行结果。测试运行日志会显示在编辑区域。



    测试运行日志的副本看起来应该象列表2-1,“All Test”词组没有出现在副本的头部,这表明执行的是逻辑单元测试。

列表2-1 逻辑单元测试运行副本

Test Suite '/Users/ernest/Library/Developer/Xcode/DerivedData/
  MyApp-efqrlcykgdvbaocnrardtbvymzbp/Build/Products/Debug-iphonesimulator/
  MyAppLogicTests.octest(Tests)' started at 2011-12-02 17:49:51 +0000
Test Suite 'MyAppLogicTests' started at 2011-12-02 17:49:51 +0000
Test Case '-[MyAppLogicTests testExample]' started.
/Users/ernest/Desktop/MyApp/MyAppLogicTests/MyAppLogicTests.m:29:
  error: -[MyAppLogicTests testExample] : Unit tests are not implemented
  yet in MyAppLogicTests
Test Case '-[MyAppLogicTests testExample]' failed (0.000 seconds).
Test Suite 'MyAppLogicTests' finished at 2011-12-02 17:49:51 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.001) seconds
Test Suite '/Users/ernest/Library/Developer/Xcode/DerivedData/
  MyApp-efqrlcykgdvbaocnrardtbvymzbp/Build/Products/Debug-iphonesimulator/
  MyAppLogicTests.octest(Tests)' finished at 2011-12-02 17:49:51 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.000 (0.003) seconds



到此,你已经正确的配置了运行逻辑单元测试的单元测试目标。参考“编写测试用例方法”,了解如何为它添加测试用例。


应用程序单元测试的设置
如果你创建了一个包含单元测试的工程,他的主单元测试目标已经被配置成了执行应用程序单元测试。

以下步骤用于设置一个执行应用程序测试的单元测试目标:
1.在工程编辑器中,选择你想要设置的单元测试目标,显示Build Settings面板。
2.在Build Settings面板的范围工具条,点击All。
3.设置Build Loader的构建设置:
   iOS: $(BUILT_PRODUCTS_DIR)/<app_name>.app/<app_name>
     Mac: $(BUILT_PRODUCTS_DIR)/<app_name>.app/Contents/MacOS/<app_name>



<app_name>是你应用的名字(构建应用的目标的Product Name构建设置的值)。
XCODE会显示工程构建配置的构建设置的值,在这里分位Debug和Release。

4.设置Test Host值为:
$(BUNDLE_LOADER)



5.让这个目标依赖构建应用的那个目标。
6.确保这个目标在方案的Test动作中,以构建你想要添加应用程序单元测试的应用。



为确认单元测试目标能够正确执行应用程序测试:
1.从Scheme工具条菜单,选择单元测试方案并运行目标:
2.选择Product > Test。
3.选择选择View > Navigators > Log,显示日志导航器。
4.在日志导航器的动作列表中(窗口左侧),选择以单元测试目标命名的测试运行结果。测试运行日志会显示在编辑区域。



测试运行日志的副本看起来应该象列表2-2,“All Test”词组出现在副本的头部,这表明执行的是应用程序单元测试。

列表2-1 应用程序单元测试运行副本

Test Suite 'All tests' started at 2011-12-02 19:21:52 +0000
 
Test Suite '/var/mobile/Applications/A973B25F-0B11-417D-AD59-2A499060F521/
  MyAppApplicationTests.octest(Tests)' started at 2011-12-02 19:21:52 +0000
Test Suite 'MyAppApplicationTests' started at 2011-12-02 19:21:52 +0000
Test Case '-[MyAppApplicationTests testExample]' started.
/Users/ernest/Desktop/MyApp/MyAppApplicationTests/MyAppApplicationTests.m:29:
  error: -[MyAppApplicationTests testExample] : Unit tests are not implemented
  yet in MyAppApplicationTests
Test Case '-[MyAppApplicationTests testExample]' failed (0.001 seconds).
Test Suite 'MyAppApplicationTests' finished at 2011-12-02 19:21:52 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.001 (0.002) seconds
Test Suite '/var/mobile/Applications/A973B25F-0B11-417D-AD59-2A499060F521/
  MyAppApplicationTests.octest(Tests)' finished at 2011-12-02 19:21:52 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.001 (0.003) seconds
Test Suite 'All tests' finished at 2011-12-02 19:21:52 +0000.
Executed 1 test, with 1 failure (0 unexpected) in 0.001 (0.012) seconds



现在,你已经正确的配置了运行应用程序单元测试的单元测试目标。参考“编写测试用例方法”,了解如何为它添加测试用例。

=======================================================================================

编写测试用例方法

通过向测试集类添加测试用例方法,你就向测试集添加了测试用例。一个测试用例方法是一个以test...命名的测试集类的实例方法,不带参数,返回值类型为void。测试用例方法调用被测试代码(也就是单元),并报告该调用是否产生预期的结果--比如说,他们是否返回预期的值或者抛出适当的异常。测试用例方法使用一组宏,来检查预期的条件以及报告它们的发现。“单元测试结果宏参考”一节描述了这些宏。

对于要访问测试单元的测试用例方法,你必须向测试目标添加适当的实现文件,并将相关的头文件导入到你的测试集类中。您可以参考“iPhoneUnitTest”样例代码工程。

注意:测试用例方法是用Objective -c编写。

这是测试用例方法的结构:

- (void)test<test_case_name> {
   ...     // Set up, call test-case subject API.
   ST...   // Report pass/fail to testing framework.
   ...     // Tear down.
}



当Xcode运行单元测试时,它单独调用每个测试用例方法。因此,每个方法必须准备和清理任何它需要同对象API交互的变量,结构和对象。为了方便,你可以为测试集类增加一对方法,在测试用例被调用之前和之后,他们分别被调用:setUp和tearDown。就像测试用例方法一样,这两个方法都要返回void并且不带参数。

下面是setUp/tearDown方法对的一个例子:

- (void)setUp {
   test_subject = [[[MyClass alloc] init] retain];
   STAssertNotNil(test_subject, @"Could not create test subject.");
}
 
- (void)tearDown {
   [test_subject release];
}




注意:当在setUp或tearDown的调用中报告失败,Xcode将报告发起调用的测试用例失败。

执行单元测试的方案配置

方案测试行为标识了该方案用于执行单元测试的目标。在测试行为中,你可以指定你想在该方案中执行的单元测试目标,测试集和测试用例。

如果在你为工程添加单元测试之后,Xcode自动为你创建方案,它会为执行单元测试的目标创建一个方案。你也可以编辑其他方案或者添加新的方案,来执行你的单元测试。

为方案增加一个单元测试目标
在你能为方案增加单元测试目标之前,确保你的项目正确配置了单元测试。参见“在工程中设置单元测试”学习其方法。

为方案增加一个单元测试目标:
1.从方案工具菜单,选择你想要添加单元测试目标的方案。
2.从同一个菜单,选择Edit Scheme。
3.选择测试动作。



4.在测试动作信息面板,点击Add按钮。
5.选择你想要加到测试动作上的单元测试目标,点击Add。



iOS:虽然Xcode可以在模拟器上运行逻辑和应用程序单元测试,Xcode不能在iOS设备上运行单元测试。因此,如果你在一个方案中包含并都激活了这两类单元测试,你将不能在iOS设备上运行单元测试。


创建一个运行单元测试的方案
为了创建一个实现在单元测试目标内的可运行单元测试的方案:
1.从方案工具条菜单,选择New Scheme。
2.指定下列信息:
    Target:选择你希望方案使用的单元测试目标。
    Name:为方案输入名字。



3.点击OK。

执行单元测试

为确保你对代码的修改不会改变它的正确行为,你应该阶段性的运行你的测试集,特别是作出显著改变之后。这一章解释了如何运行单元测试。

你通过对一个标识了一个或多个测试目标的方案执行Test命令,你可以运行单元测试。

为了运行单元测试:
1.从Scheme工具菜单,选择某个方案,这个方案将你想使用的单元测试目标加入到其测试动作中(参见“配置单元测试方案”一节),以及运行设备。

2.选择Product > Test。
如果一个或多个测试用例失败了,会在问题导航器中列出(View > Navigator > Show Issue Navigator)。

3.为了查看你的单元测试的副本,选择 View > Navigators > Show Log Navigator,并选择在log导航器中列出的第一个测试动作。
log查看器显示了单元测试的执行日子,如图5-1所示:

图5-1 应用程序单元测试执行日志



编写可测试的代码

Xcode集成了对单元测试的支持,这让它可以以任何你想要的方式,为支持你的开发努力构建测试集。你可以利用Xcode中的单元测试检测你代码中潜在的衰退或者验证你的应用的行为。这个测试可以通过确保单元以期待的方式行为,来提高你代码的稳定性。

当然,你通过单元测试获得的稳定级别,高度依赖你写的测试用例的质量。在你编写代码时遵循以下准则,来确保它是容易测试的:

1.定义API需求:你应该为你添加到项目中的每一个方法或函数定义需求和产出。这些需求应该包括输入和输出范围,异常在什么条件下被抛出,以及返回值类型(特别是这些值为类的实例时)。指定需求并确定在代码中实现了需求,将帮助你写出强壮和安全的代码。

参见“iPhoneUnitTest”样例代码工程是个例子,演示了如何使用异常来识别和报告客户端代码使用了错误的库。

2.一边写代码一边写测试用例。在你设计和编写每个方法或函数时,可以写一个或多个测试用例来确保满足了API的需求。对于现有代码或正在编写中的代码写测试用例会更难。

3.检查边界条件:如果方法的一个参数必须有指定范围的值,你的测试应该传入在这个范围中最小和最大值之间的值。例如,如果一个过程有一个整型参数,它在0到100间取值,包括边界值,那个方法的测试代码应该为参数传入0,50,100 。

4.使用负面测试(negative tests):负面测试确保代码适当的响应错误条件。当代码接受了无效或者意外的输入时,检验它行为是否正确。同时检查在应该返回错误码或抛出异常时,是否做到。例如,如果一个整型参数必须在0到100之间取值,你应该创建传入-1到101的测试用例,以确保这个过程抛出了异常或者返回了错误码。

5.编写综合测试用例(comprehensive test cases):综合测试联合了不同的代码模块,来实现你的API的一些更加复杂的行为。虽然简单和独立的测试就可以工作了,堆叠的测试(stacked tests)可以检查复杂的行为并有助于捕获多得多的问题。这些类型的测试模拟了在更加现实的条件下代码的行为。例如,为了向数组中添加对象,你可能会创建数组,为其添加一些对象,并使用不同的方法移除一些对象,然后你要确保剩下对象的集合和数量是正确的。

6.使用测试用例覆盖你对BUG的修复:每当你修复了一个bug,立刻编写一个或多个测试用例来检测修复状况。


单元测试结果宏参考

SenTestingKit框架定义了一组测试用例结果宏,用来向框架报告测试用例结果。当一个测试失败,框架发送一个测试失败消息,Xcode会将其显式在日子和问题导航器中。
下面的部分描述了在你的测试方法中可用的测试结果宏。这些宏定义在SenTestCase.h中。
重点:当测试用例评估的API抛出异常时,这个测试用例将产生未知错误。为测试你的代码是否会抛出异常,创建这个测试用例时,需要显式滴检查是否会有异常,参见“异常测试”。


无条件失败(Unconditional Failure)

STFail
让测试用例失败

STFail(failure_description, ...)
参数
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


相等测试(Equality Tests)


STAssertEqualObjects

当两个对象不同时,测试失败
STAssertEqualObjects(object_1, object_2, failure_description, ...)
参数
object_1
    一个对象
object_2
    一个对象

failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表

说明:当 [object_1 isEqualTo:object_2] 为false时,测试失败



STAssertEquals

当两个值不等的时候测试失败。
STAssertEquals(value_1, value_2, failure_description, ...)

参数
value_1
                一个数值,结构体,或联合体。
value_2
                一个数值,结构体,或联合体。
failure_description
                指定你错误消息的格式化字符串,可以为nil
...
                (可选)以逗号隔开的替换到failure_description的参数列表
                
说明:当value_1 不等于value_2的时候测试失败。



STAssertEqualsWithAccuracy

当两个值的差别大于给定值时,测试失败
STAssertEqualsWithAccuracy(value_1, value_2, accuracy, failure_description, ...)

参数
value_1
                一个整型或浮点值。
value_2
                一个整型或浮点值。
accuracy
                一个整型或浮点值。
failure_description
                指定你错误消息的格式化字符串,可以为nil
...
                (可选)以逗号隔开的替换到failure_description的参数列表
说明:当value_1和value_2之间相差大于accuracy时,测试失败。


空值测试(Nil Tests)

STAssertNil

Fails the test case when a given expression is not nil.
如果给定的表达式不是nil,测试失败。
STAssertNil(expression, failure_description, ...)

参数
expression
                要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表



STAssertNotNil

Fails the test case when a given expression is nil.
当表达式为nil时,测试失败。
STAssertNotNil(expression, failure_description, ...)

参数
expression
                要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表



布尔测试(Boolean Tests)


STAssertTrue

如果给定表达式为false,测试失败。
STAssertTrue(expression, failure_description, ...)


参数
expression
                要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


STAssertFalse

如果给定表达式为true,测试失败。
STAssertFalse(expression, failure_description, ...)

参数
expression
                要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表



异常测试(Exception Tests)


STAssertThrows

当表达式不抛异常时,测试失败
STAssertThrows(expression, failure_description, ...)

参数
expression
                要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


STAssertThrowsSpecific

当表达式不能抛出特定类的异常时,测试失败。
STAssertThrowsSpecific(expression, exception_class, failure_description, ...)

参数
expression
                要测试的表达式。
exception_class
    异常类
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表

说明:当expression不会抛出exception_class的异常时,测试失败。


STAssertThrowsSpecificNamed

当表达式不能抛出特定类指定名称的异常时,测试失败。
STAssertThrowsSpecificNamed(expression, exception_class, exception_name, failure_description, ...)

参数
expression
                要测试的表达式。
exception_class
    异常类
exception_name
    异常名字的字符串
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表

说明:当expression不能抛出exception_class类中的名为exception_name的异常时,测试失败。


STAssertNoThrow

如果表达式抛异常,测试失败。
STAssertNoThrow(expression, failure_description, ...)

参数
expression
    要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


STAssertNoThrowSpecific

当表达式抛出特定类的异常时,测试失败。
STAssertNoThrowSpecific(expression, exception_class, failure_description, ...)

参数
expression
                要测试的表达式。
exception_class
    异常类
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表

说明:当expression抛出exception_class的异常时,测试失败。


STAssertNoThrowSpecificNamed

当表达式抛出特定类指定名称的异常时,测试失败。
STAssertNoThrowSpecificNamed(expression, exception_class, exception_name, failure_description, ...)

参数
expression
                要测试的表达式。
exception_class
    异常类
exception_name
    异常名字的字符串
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表

说明:当expression抛出exception_class类中的名为exception_name的异常时,测试失败。


STAssertTrueNoThrow

当表达式为false或者抛异常时,测试失败。
STAssertTrueNoThrow(expression, failure_description, ...)

参数
expression
    要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


STAssertFalseNoThrow

当表达式为true或者抛异常时,测试失败。
STAssertFalseNoThrow(expression, failure_description, ...)

参数
expression
    要测试的表达式。
failure_description
    指定你错误消息的格式化字符串,可以为nil
...
    (可选)以逗号隔开的替换到failure_description的参数列表


词汇表
                
应用程序单元测试:在运行中的应用上测试代码操作的单元测试。这些测试可以确保应用的数据结构,用户界面元素,和控制器是否正确连接并按照预期进行相互作用。不过,应用程序单元测试不是用户界面测试。应用程序单元测试不会直接操作用户界面元素,运行中的应用也不会初始化一个运行循环。
                
逻辑单元测试:对代码的操作进行单独测试的单元测试。这些测试确保代码单元(一个单独过程或者一组过程)有预期的行为。


运行目标:模拟器,设备或者xcode在构建产品后所运行的架构。
IOS:运行目标可以是模拟器或者IOS设备
MAC:运行目标是你的MAC设备,有着64位或者32位架构。

测试用例:一组标准,决定着一个或者多个过程函数的正确性。参见 test case method。
测试用例方法:一个objective-c的方法,调用一个或多个过程来测试单元操作的正确性。当单元的行为不正确,测试用例宣告失败。当测试用例失败时,它调用测试结果宏来报告这个失败。

测试集:一个SenTestCase子类。一个测试集包含一个或多个测试用例。参见test case。

(全文完)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值