PTKTestKit 1.0.0

PTKTestKit 1.0.0

测试已测试
Lang语言 Obj-CObjective C
许可证 Apache 2
发布最新发布2014年12月

未声明 维护。



  • Paul Pilone

各种类构建,以使 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 中的主要类是测试用例:PTKTestCaseSenTestCase 的子类)。这个类与 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测试导航器不支持运行单个大纲测试和示例。

待办事项

  • [ ] 清理代码库(示例与源代码混合)
  • [ ] 创建Podspec
  • [ ] 提供更好的内联文档
  • [ ] 动态扩展XCTestKit
  • [ ] 在PTKTestCase中添加开启/关闭示例的支持
  • [ ] 添加版权头文件
  • [ ] 改善异常处理/报告

许可证

PTKTestKit是根据Apache License, version 2.0条款授权的。请参阅LICENSE文件以获取全部细节。

归功于

PTKTestKit由Paul Pilone提供。由Element 84提供支持。

此解决方案主要基于Brian Coyner的OCUnit Parameterized Test Case示例。