2011-01-03 16 views
1

Ich habe eine einzige Funktion, die Variationen für eine Reihe von Komponententests bei einem String-Parameter generiert. Wie kann ich das Factory-Attribut (oder eine alternative Methode), das zusätzliche Takes benötigt, als String-Parameter für die Factory-Methode verwenden?Wie übergibt man einen String-Parameter an eine mbunit Factory-Methode?

Ich verwende mit Gallio/mbUnit für ein automatisiertes Testframework.

Antwort

2
[TestFixture] 
public class SampleFixture 
{ 
    [Column("123", "456")] 
    private string parameter; // Causes the fixture to be run once for each value. 

    public IEnumerable<string> GetData() 
    { 
     yield return "abc" + parameter; 
     yield return "def" + parameter; 
     yield return "ghi" + parameter; 
    } 

    [Test, Factory("GetData")] 
    public void MyDataDrivenTest(string text) 
    { 
     TestLog.WriteLine(text); 
    } 
} 

Sie könnten die Artikel über data-driven tests im Gallio wiki lesen möchten. Sie finden viele Beispiele zur Verwendung von [Row], [Column] und anderen praktischen Funktionen zum Erstellen datengesteuerter Tests mit MbUnit.

UPDATE: Im obigen Beispiel habe ich die Daten von der Fabrik mit dem externen Parameter nur verkettet. Daher wird der Test 6 Mal ausgeführt ("abc123", "def123", "ghi123", "abc456", "def456" und "ghi456"). Aber Sie könnten den Parameter einfach auf andere Weise verwenden; wie zum Beispiel das gesamte Verhalten von GetData zu ändern.

+0

Danke; Aber meine Frage ist, wie Sie in Ihrem Beispiel eine Zeichenfolge an die GetData-Methode übergeben, damit sie bestimmen kann, was als Testdaten zurückgegeben werden soll. – tgiphil

+0

Ich bin mir nicht sicher, genau zu verstehen. GetData kann zurückgeben, was Sie wollen, und nicht notwendigerweise eine Liste von Rendite-Renditen. Es kann beispielsweise Daten aus einer externen Datenquelle wie einem Repository, einem benutzerdefinierten Generator oder einer beliebigen Art von Datenfactory abrufen. Vielleicht könnten Sie ein Beispiel dafür geben, was Sie erreichen möchten. Woher kommt dieser String-Parameter? Benutzereingabe, Datenbank, Konfigurationsdateien? –

+0

Ich möchte eine Methode aufrufen, die eine Zeichenfolge akzeptiert und IEnumerable für den Komponententest zurückgibt. Der Methode muss eine Zeichenfolge übergeben werden, damit sie die Daten generieren kann - im Grunde generiert sie eine ganze Reihe von Permutationen basierend auf der gegebenen Zeichenkette. Was ich suchte, war ein Attribut wie dieses: [Test, Factory ("GetData"), "123"] welches die Methode IEnumerable GetData (string key) mit "123" für key aufruft. – tgiphil