Does a framework like Factory Girl exist for Java? [closed] Does a framework like Factory Girl exist for Java? [closed] ruby-on-rails ruby-on-rails

Does a framework like Factory Girl exist for Java? [closed]


I also looked for a Java equivalent of Factory Girl, but never found anything like it. Instead, I created a solution from scratch. A factory for generating models in Java: Model Citizen.

Inspired by Factory Girl, it uses field annotations to set defaults for a Model, a simple example from the wiki:

@Blueprint(Car.class)public class CarBlueprint {    @Default    String make = "car make";    @Default    String manufacturer = "car manufacturer";    @Default    Integer mileage = 100;    @Default    Map status = new HashMap();}

This would be the Blueprint for the Car model. This is registered into the ModelFactory, than new instances can be created as follows:

ModelFactory modelFactory = new ModelFactory();modelFactory.registerBlueprint( CarBlueprint.class );Car car = modelFactory.createModel(Car.class);

You can override the values of the Car model by passing in an instance of Car instead of the Class and setting values as needed:

Car car = new Car();car.setMake( "mustang" );car = modelFactory.createModel( car );

The wiki has more complex examples (such as using @Mapped) and details for a few more bells and whistles.


One possible library for doing this is Usurper.

However, if you want to specify properties of the objects you are creating, then Java's static typing makes a framework pointless. You'd have to specify the property names as strings so that the framework could look up property accessors using reflection or Java Bean introspection. That would make refactoring much more difficult.

It's much simpler to just new up the objects and call their methods. If you want to avoid lots of boilerplate code in tests, the Test Data Builder pattern can help.


  1. I understand this isn't for everybody, but you could write Ruby test code against your Java code. (JTestR)
  2. The preferred way of doing this in Java is using the Test Data Builder pattern. I would argue that this approach doesn't really warrant introducing the complexity of a framework or external dependency. I just don't see how you could specify much less using a framework and get anything more out of it... the Builder syntax is essentially equivalent to your FactoryGirl syntax. (Someone feel free to convince me otherwise!)