Habillage Func généralisé avec des valeurs anonymes équivalentes à AutoFixture ‘With’

Dans un test basé sur AutoFixture, j’essaie d’exprimer aussi clairement que possible ce qui suit:

Quand je passe au paramètre x de cette méthode, en renseignant anonymement les autres parameters, le résultat est …

Prenons l’exemple d’une méthode d’usine: –

 class X { public static X Create( Guid a, Guid b, Guid c, Ssortingng x, Ssortingng y); 

J’essaie d’exprimer comme une série succincte de tests:

  1. Si je passe null pour x , il devrait jeter
  2. Si je passe null pour y , il devrait jeter

Pour exprimer, je peux dire:

 var fixture = Fixture(); var sut = default( Func); sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, ssortingng anonY ) => x => X.Create( anonA, anonB, anonC, x, anonY ) ); Assert.Throws( () => sut( null)); 

Pour le deuxième cas, qui n’est que légèrement différent, j’ai besoin de faire:

 var fixture = Fixture(); var sut = default( Func ); sut = fixture.Get( ( Guid anonA, Guid anonB, Guid anonC, ssortingng anonX ) => y => X.Create( anonA, anonB, anonC, anonX, y ) ); Assert.Throws( () => sut( null)); 

Pour les propriétés, il y a With dans AutoFixture. Existe-t-il un équivalent pour les arguments method (et / ou ctor)?

PS 0. Cela ne me dérange pas s’il est nécessaire d’entrer dans les chaînes «magiques» pour ce cas – c’est-à-dire, avoir le bit x être "x" .

PS 1. L’autre éléphant dans la pièce c’est que je me cogne la tête contre les surcharges 4x de Get in AutoFixture – ou est-ce parce que j’ai une ancienne version dans cet environnement?

PS 2. Nous ouvrons également de meilleures suggestions quant à la manière de modéliser ceci – tant qu’ils traitent du fait que je souhaite que ce soit une invocation de méthode et non des propriétés ou des champs (et j’aimerais que cela fonctionne dans un style à correction automatique ).

    AutoFixture ne contient aucune fonctionnalité qui facilite cela, mais je suis ouvert aux suggestions. Cependant, je ne vois pas comment vous pourriez exprimer quelque chose comme ça d’une manière fortement typée. À quoi ressemblerait la syntaxe?

    Toutefois, si vous en avez uniquement besoin pour tester le fonctionnement de Null Guards, vous pouvez utiliser AutoFixture.Idioms pour cela.

    Voici un exemple.

     var fixture = new Fixture(); var assertion = new GuardClauseAssertion(fixture); var method = typeof(GuardedMethodHost).GetMethod("ConsumeSsortingngAndInt32AndGuid"); assertion.Verify(method); 

    Si vous regardez le code source de Ploeh.AutoFixture.IdiomsUnitTest.Scenario vous trouverez d’autres exemples, mais Ploeh.AutoFixture.IdiomsUnitTest.Scenario que c’est l’un des domaines les plus mal documentés d’AutoFixture …

    Une autre chose est que les méthodes avec peu (ou pas) de parameters sont meilleures que les méthodes avec beaucoup de parameters, avez-vous donc envisagé d’introduire un object paramètre?