2015-09-25 18 views
6

Voglio che AutoFixture generi due numeri interi, e per il secondo, non voglio che sia 0, o il numero generato precedente. C'è un modo per dire a AutoFixture di onorare quel "requisito".Come ottenere AutoFixture creare un numero intero> 0, e non un altro numero?

Guardando a RandomNumericSequenceGenerator, mi sembra il lower limit is 1, quindi potrebbe non essere necessario specificare il primo requisito. Successivamente, stavo esaminando l'opzione "seeding", ma come indicato in this answer, per impostazione predefinita non verrà utilizzato per un numero.

C'è qualcosa che sto trascurando qui?

+0

Usi plain-AutoFixture o AutoFixture.Xunit/NUnit? –

+0

Sfortunatamente, AutoFixture semplice usando MSTest. Perché? Ad esempio, come potrebbe aiutare Xunit? – Ties

+0

È inferiore al boilerplate con AutoFixture.Xunit. Vedi la [risposta] (http://stackoverflow.com/a/32782299/467754) di seguito. –

risposta

7

Ecco un modo per farlo con AutoFixture pianura:

[Fact] 
public void GenerateTwoDistinctNonZeroIntegersWithAutoFixture() 
{ 
    var fixture = new Fixture(); 
    var generator = fixture.Create<Generator<int>>(); 

    var numbers = generator.Where(x => x != 0).Distinct().Take(2); 
    // -> 72, 117 
} 

Ed ecco un modo per fare questo con AutoFixture.Xunit:

[Theory, AutoData] 
public void GenerateTwoDistinctNonZeroIntegersWithAutoFixtureXunit(
    Generator<int> generator) 
{ 
    var numbers = generator.Where(x => x != 0).Distinct().Take(2); 
    // -> 72, 117 
} 
+3

Funzionerà, ma non è il comportamento richiesto il comportamento * predefinito * di AutoFixture? –

+1

OMG, infatti. Sono stato ingannato quando ho letto per la prima volta la domanda originale. [Questo] (http://stackoverflow.com/questions/32781002/how-to-get-autofixture-create-an-integer-that-is-0-and-not-another-number/32782299?noredirect=1# comment53403678_32781002) dovrebbe essere la risposta, come commentato da @AlexanderW. Buona pesca! Grazie per averlo indicato. –

+0

@NikosBaxevanis Hai ragione e non ho accettato la tua risposta. Non posso accettare il commento di Mark, poiché è un commento, ovviamente. Forse Mark può "promuovere" il suo commento, quindi posso accettarlo;) – Ties