2017-10-16 3 views
1

テスト中に次のようなシナリオがあります。これをテストするためのショートカットがあるかどうか聞いてみたいと思います。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)); 
    } 
} 

は今、私は再び同じテストを行うことなく、単にPostBetSlipRequestGetBetSlipRequestOddStyleを反転する必要があります。私は[Values]属性で試したが、それは私が望むように動作しません。

American - Europeanでこれらの2つのテストケースソースを一度実行し、別の時間をEuropean - Americanとすれば可能ですか?

答えて

1

確かに、それぞれのシナリオ(US→Eur & Eur→US)はテスト方法の新しいテストケースですか?

n個のテストケースがありますが、n = QaTestCasesの総数+ MlTestCasesの総数です。

実際には2n個のテストケース([Eur-> US、US-> Eur] permuatationごとにそれぞれの既存のテストケース)をテストします。だから、これは既存のものを使用してEur/USの順列を追加して、新しいTestCaseSourceでなければならないと提案している。

[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"; 
} 

結果のセットを与える:

[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 output

は、あなたが本当に多く、このような何かをしたいのに対し

右戻ってそれをストリップ、あなたは今漠然とこのようなものを持っています

test screensnip new

+0

ええ、私は実際にちょっとだった後で私は質問を投稿した後、テストフィクスチャを汚染する静的な "ヘルパー"メソッドを書く必要があるので、ちょっと面倒だと思います(もちろん別のクラスで抽出することもできます) – kuskmen

関連する問題