JSZVCR 0.7.8

JSZVCR 0.7.8

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最新发布2016年2月

Jordan Zucker维护。



JSZVCR 0.7.8

该项目已停止维护,不再继续开发。请使用BeKindRewind代替。

一个用于记录和重放网络事件以进行集成测试的简单XCTest子类

特性

  • 轻松记录和重放
  • 在网络请求与记录的请求不匹配时,容易失败测试(可以轻松设置级别)
  • 可以为匹配记录的响应到请求创建自定义匹配器
  • 提供了一个XCTest子类

描述

这是一个用于自动集成测试网络调用记录和重放的简单测试框架。为了减少模拟,它记录了实时网络请求和响应,然后在后续运行中重放它们,并使用https://github.com/AliSoftware/OHHTTPStubs模拟网络请求,以便您的软件可以平静地运行。

用法

要运行示例项目,请克隆仓库,然后从Example目录先运行pod install

安装

JSZVCR可通过CocoaPods获取。要安装它,只需将以下行添加到您的Podfile中。

pod "JSZVCR"

示例

#import <JSZVCR/JSZVCR.h>

@interface JSZVCRExampleTestCase : JSZVCRTestCase
@end

@implementation JSZVCRExampleTestCase

- (BOOL)isRecording {
    return YES;
}

- (Class<JSZVCRMatching>)matcherClass {
    return [JSZVCRSimpleURLMatcher class];
}

- (JSZVCRMatchingStrictness)matchingFailStrictness {
    return JSZVCRMatchingStrictnessNone;
}

- (void)testSimpleNetworkCall {
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://httpbin.org/get?test=test"]];
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration ephemeralSessionConfiguration]];

    // don't forget to create a test expectation
    XCTestExpectation *networkExpectation = [self expectationWithDescription:@"network"];
    NSURLSessionDataTask *basicGetTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        XCTAssertNil(error);
        XCTAssertNotNil(response);
        XCTAssertNotNil(data);
        NSDictionary *dataDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
        XCTAssertNil(error);
        XCTAssertEqualObjects(dataDict[@"args"], @{@"test" : @"test"});
        // fulfill the expectation
        [networkExpectation fulfill];
    }];
    [basicGetTask resume];
    // explicitly wait for the expectation
    [self waitForExpectationsWithTimeout:5 handler:^(NSError *error) {
        if (error) {
             // Assert fail if timeout encounters an error
             XCTAssertNil(error);
        }
    }];
}

运行此测试后,将在控制台输出类似以下的日志文件:

2015-06-25 20:48:47.968 xctest[97164:1809740] filePath = /Users/jzucker/Library/Developer/CoreSimulator/Devices/F9C2D4BE-9022-48E9-9A27-C89B8E615571/data/Documents/JSZVCRExampleTestCase.bundle/testSimpleNetworkCall.plist

将此拖放到您的项目作为以您的测试案例命名的bundle(它自动命名)。

然后将isRecording值设置为NO

- (BOOL)isRecording {
    return NO;
}

然后在随后的运行中,测试将使用记录的文件来响应匹配的网络请求。

JSZVCRTestCase默认值

这些值将自动设置。如果您愿意可以覆盖适当值,但这些值无需更改。默认值可能需要更改直到1.0版本发布。关于记录和回放,它们仅在测试运行时有效,不在设置和清理期间有效。

- (BOOL)isRecording {
    return YES;
}

- (JSZVCRMatchingStrictness)matchingFailStrictness {
    return JSZVCRMatchingStrictnessNone;
}

- (Class<JSZVCRMatching>)matcherClass {
    return [JSZVCRSimpleURLMatcher class];
}

基本测试策略

尝试避免编写依赖于状态的测试。相反,确保当 isRecording == YES 时,测试可以完全记录并用于回放,包括 setUp 和 tearDown。这有助于开发过程,并确保测试不会基于另一种开发者在更新你的测试并使用新的录制版本时无法重现的条件。

对 iOS 7 的支持

如果您想要针对 iOS 7 或更低版本进行测试,请使用 0.6.x 或更低版本的版本。

作者

Jordan Zucker, [email protected]

许可证

JSZVCR 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。

发布标准

  • 脚本以将响应移动到项目中
  • 清理响应日志
  • 添加通用日志
  • 将记录器分离(分离 subspec)
  • 更改名称? (回到过去)
  • 将返回 obj 而不是字典作为响应
  • 处理多个响应
  • 除非有东西被记录,否则不要保存文件
  • 速度测试
  • 更好地支持取消和错误的网络连接
  • 正确支持重定向
  • 添加 Swift 测试和 Swift 测试目标