Objective-C 对象工厂,用于测试。
作为一个 CocoaPod,只需将以下内容添加到您的 Podfile 中:
pod 'Defactory'
git submodule
。考虑到以下 User 类:
LSUser
@interface LSUser : NSObject
@property (nonatomic, strong) NSString *username;
@property (nonatomic, strong) NSString *password;
@property (nonatomic, strong) NSString *state;
@property (nonatomic, assign) NSUInteger loginCount;
@property (nonatomic, assign) BOOL somethingBool;
@property (nonatomic, strong) NSString *email;
@property (nonatomic, strong) LSUser *dad;
@end
@implementation LSUser
@end
FACTORIES(^{
// Default factory
[LSUser defineFactory:^(LSFactory *f) {
f[@"username"] = @"foo"; // Set values.
f[@"password"] = @"hunter2";
// Define sequences.
f[@"email"] = sequence(^(NSUInteger i) { return [NSString stringWithFormat:@"foo%d@example.com", i]; });
}];
// Other named factories with inheritance.
[LSUser define:@"suspended" parent:@"LSUser" factory:^(LSFactory *f) {
f[@"state"] = @"suspended";
// User boxed primitives, Defactory will take care of the rest.
f[@"loginCount"] = @2;
f[@"somethingBool"] = @YES;
}];
[LSUser define:@"son" parent:@"LSUser" factory:^(LSFactory *f) {
// Associations.
f[@"dad"] = association([LSUser class]);
}];
});
// Build an object with the default factory and params
LSUser *user = [LSUser build];
// Build an object with the default factory overriding some params.
user = [LSUser buildWithParams:@{@"password": @"secret", @"state": @"active"}];
// Build an object with a named factory.
user = [LSUser build:@"suspended"];
// Build an object with a named factory overriding some params.
user = [LSUser build:@"suspended" params:@{@"loginCount": @4}];