MRDatabaseContentChecker 0.4.0

MRDatabaseContentChecker 0.4.0

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布最后发布2016年1月

由Mike Rhodes维护。Mike Rhodes.



  • 作者:
  • Michael Rhodes

MRDatabaseContentChecker 是一个小型库,可简化在测试中对数据库内容进行检查,并使其更加可读。它试图不干扰您的操作,使编写繁琐的检查变得更简单、更不容易出错。

您可以对表或查询的内容进行测试。

MRDatabaseContentChecker 要求您使用 FMDB。

用法

您可以选择检查数据库表的全部内容,或查询的结果(因为它们都是类似表的结构)。

以下是最简单的示例,使用了SenTest:

FMDatabase *db = [...];
MRDatabaseContentChecker *dc = [[MRDatabaseContentChecker alloc] init];

NSError *validationError;
NSArray *expectedRows = @[
    @[@"first_name", @"surname"],  // first array is column headers
    @[@"Mike",       @"Rhodes"],   // expected data starts in row 2
    @[@"John",       @"Smith"]     // and continues...
];
STAssertTrue([dc checkDatabase:db
                         table:@"users"
                       hasRows:expectedRows
                         error:&validationError],
             [dc formattedErrors:validationError]);

本质上

  1. 创建一个期望值数组。这是一个数组的数组。第一个数组始终包含您要检查的列标题。后续的行定义了您期望找到的数据。
  2. 在测试宏中调用 -checkDatabase:table:hasRows:error:
  3. 如果那返回 NO,则使用 -formattedErrors 辅助函数打印失败的测试。

查询

以下示例可以重写为使用查询而不是表名

FMDatabase *db = [...];
MRDatabaseContentChecker *dc = [[MRDatabaseContentChecker alloc] init];

NSError *validationError;
NSArray *expectedRows = @[  /* as before */  ];
STAssertTrue([dc checkDatabase:db
                         query:@"select first_name, surname from users;"
                       hasRows:expectedRows
                         error:&validationError],
             [dc formattedErrors:validationError]);

目前,不支持占位符;您在测试中生成 SQL。如果没有,请随时打开 PR,因为我并不特别反对包含更多功能。

注意事项

  • 表检查变体依赖于 SQLite 返回行时返回的“未知”排序。目前,如果这不工作,则必须使用查询变体才能允许包含 ORDER BY 子句。
  • 对报告的错误数没有限制。如果存在数百万个错误,这可能会成为问题,因为每个错误都在通过方法传递的错误对象中有一个条目。

检查引用

-checkDatabase:table:hasRows:error:-checkDatabase:query:hasRows:error: 检查

  • 每个期望值都与结果集中对应的项相匹配。
  • 结果数与期望数相同。

类型

如上所示,期望值作为数组的数组传递。每个期望值都会根据其类型与其在结果集中的对应项进行比较。允许的类型有:

NSString
使用 -isEqual 检查 NSString 对象。
NSNumber
使用-isEqual方法与数据库中的-longLongIntForColumn值进行比较来检查NSNumber对象。
BOOL(boxed)
由于box BOOL是NSNumber,请参阅NSNumber。
NSData
使用-isEqual方法与数据库中的-dataForColumn值进行比较来检查NSData对象。
NSRegularExpression
如果-numberOfMatchesInString:options:error:返回一个或多个匹配项,则此检查将通过。
[NSNull null]
此检查将[NSNull null]与-objectForColumnName:返回的列值进行比较。

使用不受支持的类型(或不是支持类型子类的类)将导致检查值失败。

您可以为给定列的预期值传递不同的数据类型

expectedRows = @[
    @[@"name",        @"github_username", @"age"],
    @[@"Mike Rhodes", @"mikerhodes",      @30],
    @[@"John Smith",  [NSNull null],      @27]
];

要求

MRDatabaseContentChecker依赖于

  • FMDB

安装

作者

Michael Rhodes, [email protected]

许可

MRDatabaseContentChecker在Apache v2许可下可用。有关更多信息,请参阅LICENSE文件。