Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

209
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!