各种类构建,以使 iOS 测试更快、更简单、更有效。
PTKTestKit 是一套类,旨在用于 iOS 和 OS X 应用程序的单元和集成测试。所有类都是建立在 SenTestingKit 的基础上,并与您当前的测试工作流程很好地配合。目标是使 iOS 和 OS X 中的测试设置和执行尽可能简单,以鼓励和推广测试文化。尽管名称如此,PTKTestKit 并不是 SenTestingKit 或 XCTestKit 的替代品。它旨在与这些框架一起使用,并是流行测试框架的绝佳补充,如 KIF。
PTKTestKit 建立在 PTKTestCase
上,支持多次运行测试方法,并为每次运行提供不同的参数。除了标准的 SenTestCase 测试方法外,以 outlineTest
为前缀的测试方法将为您子类提供示例执行。每个 outline 测试都有独特的名称,这允许每个 outline 测试运行都在 Xcode 5 的测试导航器中显示出来。
最终,安装 PTKTestKit 的首选方法将是通过 CocoaPods 软件包管理器。在当前的提交中,安装 PTKTestKit 的唯一方法是克隆仓库,并将源文件根据需要复制到您的项目中。当将文件复制到您的项目或工作区时,请确保将它们添加到您的测试目标中。
一旦 PTKTestKit 被添加到您的项目中,就是时候开始编写测试了。PTKTestKit 中的主要类是测试用例:PTKTestCase
(SenTestCase
的子类)。这个类与 SenTestCase 类似,有一个很大的优势:它允许您为特定的测试方法定义示例(参数)。支持参数的测试方法必须以前缀 outlineTest
开头,并返回 void
,类似于 SenTestCase
要求测试方法以前缀 test
开头。测试方法通过 PTKTestCase 的子类提供示例,并通过选择器区分。
第一步是创建一个新的测试用例,具有 outline 测试。在我们的例子中,我们将创建一个测试用例来验证一个简单的页眉-详细信息应用程序。请注意,此示例使用 KIF,但您可以使用 PTKTestCase 在任何情况下。
PTKDetailTests.h
#import "PTKTestCase.h"
@interface PTKDetailTests : PTKTestCase
@end
PTKDetailTests.m
#import "PTKDetailTests.h"
#import <KIF/KIF.h>
@implementation PTKDetailTests
+ (NSArray *)examplesForOutlineTestWithSelector:(SEL)selector
{
return [PTKOutlineExample outlineExamplesFromResource:@"sample-data" bundle:nil error:nil];
}
- (void)outlineTestForViewingDetail
{
NSLog(@"INFORMATION: Example: %@", self.example[@"name"]);
[tester tapViewWithAccessibilityLabel:self.example[@"name"] traits:UIAccessibilityTraitStaticText];
[tester waitForViewWithAccessibilityLabel:self.example[@"value"] traits:UIAccessibilityTraitStaticText];
}
- (void)testStaticRow
{
[tester tapViewWithAccessibilityLabel:@"Test Static Row" traits:UIAccessibilityTraitStaticText];
[tester waitForViewWithAccessibilityLabel:@"Static Row" traits:UIAccessibilityTraitStaticText];
}
@end
在本文档中,需要关注的重要方法是:+ (NSArray *)examplesForOutlineTestWithSelector:(SEL)selector
和- (void)outlineTestForViewingDetail
。测试方法- (void)testStaticRow
是一个标准的SenTestCase测试方法的示例,它展示了如何在同一个测试案例中包含大纲测试和测试。
在+ (NSArray *)examplesForOutlineTestWithSelector:(SEL)selector
中,传入一个表示大纲测试方法的选择器。通过JSON文件创建示例,并作为一个数组返回。当执行这个测试案例时,你会在测试导航器中注意到outlineTestForViewingDetail
会多次运行,每个运行都有一个唯一的名称。每次运行使用一个示例。
PTKOutlineExample
用于向每个大纲示例提供值的类。有两个方便的初始化示例的方法:+ (NSArray *)outlineExamplesFromResource:(NSString *)resourceName bundle:(NSBundle *)bundle error:(NSError *__autoreleasing *)error
和+ (instancetype)outlineExampleNamed:(NSString *)name values:(NSDictionary *)params
。正如你所见,示例可以从JSON文件或NSDictionary实例创建。这允许你将示例值内联写入或组织到样本数据文件中。
需要注意的是,示例需要一个“名称”值来唯一标识大纲测试。如果从资源文件创建示例,则必须有一个“名称”键/值。在之前的示例中使用的资源文件看起来像这样
[
{
"name" : "Test Foo",
"value" : "Foo"
},
{
"name" : "Test Bar",
"value" : "Bar"
}
]
由于大纲测试名称是动态生成的,因此Xcode 5测试导航器不支持运行单个大纲测试和示例。
PTKTestKit是根据Apache License, version 2.0条款授权的。请参阅LICENSE文件以获取全部细节。
PTKTestKit由Paul Pilone提供。由Element 84提供支持。
此解决方案主要基于Brian Coyner的OCUnit Parameterized Test Case示例。