2017-10-16 33 views
1

Je suis en train de tester le scénario suivant et je voudrais vous demander s'il y a un raccourci pour tester cela.Tests paramétrés à l'aide de Nunit 3.x

[Test] 
[TestCaseSource(nameof(MlTestCases))] 
[TestCaseSource(nameof(QaTestCases))] 
public void EditBetSlip_ShouldConvertOddsFromAmericanToDecimal(string selectionId) 
{ 
    // Arrange 
    var betSlipRequest = new PostBetSlipRequest 
    { 
     OddStyle = OddStyle.American.ToString(), 
     Selections = new List<PostOneSelectionRequest> 
     { 
      new PostOneSelectionRequest 
      { 
       DisplayOdds = $"+{Fixture.Create<int>()}", 
       Id = selectionId.Replace("#", "%23"), 
      }, 
     }, 
     Bets = new List<PostOneBetRequest> 
     { 
      new PostOneBetRequest 
      { 
       OddStyle = OddStyle.American.ToString(), 
       Id = 0, 
       Stake = 10, 
      }, 
     }, 
    }; 

    // Act 
    _client.EditBetslip(betSlipRequest); 
    var response = _client.RefreshBetslip(new GetBetSlipRequest { OddStyle = OddStyle.European.ToString() }); 
    var betslip = response.DeserializedBody; 

    // Assert 
    Assert.IsTrue(response.StatusCode == HttpStatusCode.OK); 

    foreach (var selection in betslip.Selections) 
    { 
     Assert.DoesNotThrow(() => decimal.Parse(selection.DisplayOdds)); 
    } 
} 

Maintenant, je dois faire le même test à nouveau, mais il suffit de retourner le OddStyle de PostBetSlipRequest et GetBetSlipRequest. J'ai essayé avec l'attribut [Values] mais cela ne fonctionne pas comme je le veux. Ce que je veux est d'exécuter toutes ces deux sources de cas de test une fois avec American - European et une autre fois avec European - American est-ce possible?

Répondre

1

Bien sûr, chaque scénario (US -> Eur & Eur -> US) est un nouveau scénario de test pour la méthode d'essai?

Comme vous avez n cas de test où n = le nombre total de QaTestCases + le nombre total de MlTestCases.

Vous voulez réellement tester des cas de test 2n (chaque cas de test existant pour chaque permutation [Eur -> US, US -> Eur]). Id suggère que cela devrait donc être juste un nouveau TestCaseSource en utilisant les existants et en ajoutant les permutations Eur/US.

dépouillant retour, vous avez quelque chose de vaguement comme tout à l'heure:

[Test] 
[TestCaseSource(nameof(TestCaseSourceA))] 
[TestCaseSource(nameof(TestCaseSourceB))] 
public void GivenX_ShouldReturnOk(string input) 
{ 
    //some test 
    Assert.Pass(); 
} 

public static IEnumerable<string> TestCaseSourceA() 
{ 
    yield return "a1"; 
    yield return "a2"; 
} 
public static IEnumerable<string> TestCaseSourceB() 
{ 
    yield return "b1"; 
    yield return "b2"; 
} 

donnant cet ensemble de résultats: test output

Alors que vous voulez vraiment faire quelque chose comme:

[Test] 
[TestCaseSource(nameof(TestCaseSourceMaster))] 
public void GivenX_ShouldReturnOk(string input, string fromOddsStyle, string toOddsStyle) 
{ 
    //some test 
    Assert.Pass(); 
} 

public static IEnumerable<string[]> TestCaseSourceMaster() 
{ 
    return TestCaseSourceA() 
     .Concat(TestCaseSourceB()) 
     .SelectMany(t => new string[][] 
     { 
      new string[]{t,"US","Eur"}, 
      new string[]{t,"Eur","Us"} 
     }); 
} 

public static IEnumerable<string> TestCaseSourceA() 
{ 
    yield return "a1"; 
    yield return "a2"; 
} 
public static IEnumerable<string> TestCaseSourceB() 
{ 
    yield return "b1"; 
    yield return "b2"; 
} 

test screensnip new

+0

Hmm oui, j'étais en fait un peu doi J'ai ensuite posté la question, mais maintenant je la trouve un peu lourde parce que j'ai besoin d'écrire toutes ces méthodes "helper" statiques qui vont polluer mon appareil de test (bien sûr que je peux les extraire dans une autre classe, mais quand même) – kuskmen