El término «Object Mother» (Madre de Objetos) es un patrón de diseño utilizado en el desarrollo de software. Este patrón se engloba dentro de la categoría de patrones de diseño creacionales y se utiliza para crear objetos de prueba o datos de prueba de manera eficiente y reutilizable.
El objetivo principal del patrón Object Mother es encapsular la creación de objetos complejos o configuraciones específicas para las pruebas. En lugar de crear manualmente cada objeto de prueba en diferentes pruebas, se define una clase o método específico que se encarga de crear y configurar los objetos necesarios.
El patrón Object Mother sigue el principio de «Fábrica de Objetos» (Factory Method), donde se delega la creación de objetos a un componente dedicado en lugar de hacerlo directamente en el código de la prueba.
Ejemplo en TypeScript:
class User {
  public name: string;
  public email: string;
  public role: string;
  constructor(name: string, email: string, role: string) {
    this.name = name;
    this.email = email;
    this.role = role;
  }
}
class ObjectMother {
  public static createDefaultUser(): User {
    return new User("John Doe", "john@example.com", "user");
  }
  public static createAdminUser(): User {
    return new User("Admin User", "admin@example.com", "admin");
  }
  public static createUserWithCustomRole(role: string): User {
    return new User("Custom User", "custom@example.com", role);
  }
}
// Ejemplo de uso en una prueba:
const defaultUser: User = ObjectMother.createDefaultUser();
console.log(defaultUser);
const adminUser: User = ObjectMother.createAdminUser();
console.log(adminUser);
const customUser: User = ObjectMother.createUserWithCustomRole("manager");
console.log(customUser);En este ejemplo, además del método createDefaultUser(), se han agregado dos métodos más a la clase ObjectMother. El método createAdminUser() crea y devuelve un objeto User con la configuración de un usuario administrador, y el método createUserWithCustomRole() permite crear y devolver un objeto User con un rol personalizado especificado como parámetro.
Al utilizar el patrón Object Mother, podemos ver cómo la clase UserMother proporciona una forma rápida y sencilla de crear y configurar objetos de la clase User, sin tener que crear y configurar cada objeto manualmente. Esto puede ser especialmente útil cuando se necesitan crear muchos objetos de manera rápida, ya que permite una mayor eficiencia y simplicidad en el proceso de creación y configuración de objetos.