2014-10-20 15 views
5

Ist es möglich, NUnit das [TestCaseSource] -Attribut mit mehr als einem Argument verwenden? Hier ist mein Code (die von MbUnit migriert wird):NUnits [TestCaseSource] mit mehreren Argumenten wie mit MbUnit [Factory]

public IEnumerable<object[]> GetTestSwitchMultiItems() 
    { 
     yield return new object[] { SwitchType.Sell, 0.94733, 
            new SwitchSourceItem[] { new SwitchSourceItem(1176, 100, 50, SwitchSourceItem.QuantityType.TotalQuantity, SwitchType.Sell)}, 
            new SwitchEquivalentItem[] { new SwitchEquivalentItem(415318955, 35, 25, SwitchType.Buy), new SwitchEquivalentItem(4348, 65, 45, SwitchType.Buy) } }; 

     yield return new object[] { SwitchType.Sell, 0.94733, 
            new SwitchSourceItem[] { new SwitchSourceItem(1176, 100, 50, SwitchSourceItem.QuantityType.TotalQuantity, SwitchType.Sell)}, 
            new SwitchEquivalentItem[] { new SwitchEquivalentItem(415318955, 15, 25, SwitchType.Buy), new SwitchEquivalentItem(4348, 25, 45, SwitchType.Buy), 
                   new SwitchEquivalentItem(430397879, 20, 15, SwitchType.Buy), new SwitchEquivalentItem(5330, 20, 85, SwitchType.Buy)} }; 
    } 

    [Test, TestCaseSource("GetTestSwitchMultiItems")] 
    public void TestSwitchMultiItems(SwitchType switchType, double exchangeRate, SwitchSourceItem[] sources, SwitchEquivalentItem[] equivs) 
    { 
     ... 
    } 

Sie sehen, Parameter als Objekt übergeben werden [], um mehr als einen Parameter in TestSwitchMultiItems zu haben. Sollte das funktionieren oder muss ich stattdessen nur einen Parameter in TestSwitchMultiItems (Objekt [] Parameter) verwenden. Vielen Dank.

Antwort

7

Ja, Sie können das Attribut TestCaseSource mit mehreren Argumenten verwenden. In dem Beispiel, das Sie geben, sehen Sie den Test TestSwitchMultiItems zweimal durchlaufen. Ich habe NUnit für den folgenden erfundenen Testcode verwendet. TestSwitchMultiItems läuft zweimal, und die triviale Assert Aufruf in jedem Test besteht.

[Test, TestCaseSource("GetTestSwitchMultiItems")] 
    public void TestSwitchMultiItems(string switchType, double exchangeRate, object[] sources, object[] equivs) 
    { 
     Assert.AreEqual("Sell", switchType); 
    } 

    public IEnumerable<object[]> GetTestSwitchMultiItems() 
    { 
     yield return 
      new object[] 
      { 
       "Sell", 0.94733, new object[] { new { a = 1176, b = 100, c = 50, d = 5, e = "Sell" } }, 
       new object[] { new { a = 415318955, b = 35, c = 25, d = "Buy", e = 4348, f = 65, g = 45, h = "Buy" } } 
      }; 

     yield return 
      new object[] 
      { 
       "Sell", 0.94733, new object[] { new { a = 1176, b = 100, c = 50, d = 5, e = "Sell" } }, 
       new object[] 
       { 
        new { a = 415318955, b = 35, c = 25, d = "Buy", e = 4348, f = 65, g = 45, h = "Buy" }, 
        new { a = 415318955, b = 35, c = 25, d = "Sell", e = 7348, f = 65, g = 45, h = "Sell" } 
       } 
      }; 
    } 
Verwandte Themen