def

Defactory

The simplest way to build test objects.

Showing:

Popularity

Downloads/wk

0

GitHub Stars

47

Maintenance

Last Commit

8yrs ago

Contributors

1

Package

Dependencies

0

License

MIT

Categories

Readme

Defactory

Objective-C object factory for testing.

Features

  • Define factories once, build everywhere.
  • Named factories.
  • Sequences.
  • Associations.
  • Handle primitives
  • Factory inheritance.
  • Tested.

Installation

As a CocoaPod Just add this to your Podfile

pod 'Defactory'

Other approaches

  • You should be able to add Defactory to you source tree. If you are using git, consider using a git submodule

Usage

Given the following User class

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

Define the one or multiple factories

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]);
    }];
});

Building stuff


// 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}];

Contributing

  1. Fork it
  2. Create your feature branch
  3. Commit your changes
  4. Push to the branch
  5. Create new Pull Request

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100