Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

210
Vistas
Cambie el comportamiento de AutoFixture con AutoMoq para devolver falso para los métodos

Decir que tengo la siguiente interfaz:

 public interface ITeam { bool HasPlayer(IPlayer player); void AddPlayer(IPlayer player); }

Actualmente tengo una prueba que parece algo similar a (usando AutoMoq):

 [Theory] [MyAutoData] public void ShouldRosterToTeamWhenPlayerIsNotRostered(Player player, Mock<ITeam> mockedTeam) { player.RosterToTeam(mockedTeam.Object); mockedTeam.Verify(team => team.AddPlayer(player), Times.Once); }

Sin embargo, una condición previa en mi código es que HasPlayer debe devolver falso para que la prueba pase cuando se llama a RosterToTeam .

Esto se puede resolver creando una ICustomization y componiendo directamente el comportamiento correcto, por ejemplo:

 public class TeamCustomization : ICustomization { public void Customize(IFixture fixture) { fixture.Customize<Mock<ITeam>>(composer => composer.Do(mock => mock.Setup(team => team.HasPlayer(It.IsAny<IPlayer>())) .Returns(false))); } }

Sin embargo, me gustaría que mis pruebas supongan siempre que los métodos booleanos tienen un valor predeterminado de false . Intenté buscar en ISpecimenBuilder , pero no pude encontrar una manera de lograr esto, ya que parece que solo funciona en propiedades, parámetros, etc.

¿Alguien puede recomendarme una forma de configurar genéricamente todos los métodos booleanos para que devuelvan falso de forma predeterminada cuando se crean de esta manera?

Editar: el culpable detrás del cambio de comportamiento es cuando ConfigureMembers = true está configurado para AutoMoqCustomization .

Así es como se ve actualmente mi MyAutoDataAttribute :

 public class MyAutoDataAttribute : AutoDataAttribute { public MyAutoDataAttribute() : base(Create) { } private static IFixture Create() { var fixture = new Fixture(); fixture.Customize(new AutoMoqCustomization { ConfigureMembers = true }); fixture.Customize(new TeamCustomization()); return fixture; } }

Para mi caso de uso, aún se necesita ConfigureMembers = true (y me gustaría eliminar TeamCustomization ).

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En primer lugar, es posible que desee utilizar AutoMoqDataAttribute para crear una simulación de la interfaz de ITeam :

 public class AutoMoqDataAttribute : AutoDataAttribute { public AutoMoqDataAttribute() : base(new Fixture().Customize(new AutoMoqCustomization())) { } }

No es necesario personalizar el accesorio para configurar sus simulacros. Será mejor que hagas eso en las pruebas en sí (la sección de organización):

 [Theory, AutoMoqData] public void ShouldRosterToTeamWhenPlayerIsNotRostered(Player player, Mock<ITeam> mockedTeam) { mockedTeam.Setup(t => t.HasPlayer(player)).Returns(false); player.RosterToTeam(mockedTeam.Object); mockedTeam.Verify(team => team.AddPlayer(player), Times.Once); } [Theory, AutoMoqData] public void ShouldNotRosterToTeamWhenPlayerIsRostered(Player player, Mock<ITeam> mockedTeam) { mockedTeam.Setup(t => t.HasPlayer(player)).Returns(true); player.RosterToTeam(mockedTeam.Object); mockedTeam.Verify(team => team.AddPlayer(player), Times.Never); }

y, finalmente, la implementación simplificada de RoastToTeam:

 public class Player { public void RosterToTeam(ITeam team) { if (team.HasPlayer(this)) { return; } team.AddPlayer(this); } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda