2017-10-16 96 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和另一個時間與European - American是否有可能?

回答

1

當然,每種情況(美國 - >歐洲&歐元 - >美國)是測試方法的新測試用例嗎?

由於您有n個測試用例,其中n = QaTestCases的總數+ MlTestCases的總數。

您實際上想要測試2n個測試用例(每個[Eur - > US,US - > Eur] permuatation每個現有測試用例)。身份證建議,因此這應該只是一個新的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 output

而你真正想要的東西更像是這樣的:

[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

嗯嗯,我真的有點兒doi以後我發佈了這個問題,但現在我覺得有點麻煩,因爲我需要編寫所有那些會污染我的測試夾具的靜態「助手」方法(當然,我可以在另一個類中提取它們,但仍然是) – kuskmen