2012-03-27 11 views
0

Ich habe einige Komponententests, die sehr große Zeichenfolgen für die Testdaten erfordern. Ich möchte die HTML-Zeichenfolge im Test selbst nicht deklarieren, da dies den eigentlichen Test verdecken kann. Stattdessen möchte ich diese Zeichenfolgen für jeden Test von einer externen Ressource laden.Schreiben eines parametrisierten Tests fehlgeschlagen mit: Beim Abrufen der Parameter für den Testfall ist ein Fehler aufgetreten: ungültiger Wert für das parametrierte Feld

Obwohl ich nicht den gleichen Test mit verschiedenen Datensätzen durchführe, scheint parametrisierte Tests eine praktikable Lösung zu sein; Ich habe jedoch Schwierigkeiten, das folgende Beispiel zur Arbeit zu bringen.

Hinweis: Dieser Code basiert auf der TestNG example.

package flexUnitTests 
{ 
    import helpers.HTMLDataHelper; 

    import org.flexunit.runners.Parameterized; 
    import org.hamcrest.assertThat; 
    import org.hamcrest.text.containsString; 

    [RunWith("org.flexunit.runners.Parameterized")] 
    public class SimpleTestCase 
    { 
     private var parameterized:Parameterized; 

     public static var dataLoader:HTMLDataHelper = new HTMLDataHelper("data/layer.html"); 

     [DataPoint(loader="dataLoader")] 
     public static var htmlContent:String; 

     [Test(dataprovider="htmlContent", description="Tests something.")] 
     public function mustPassThisSimpleTest(htmlContentParam:String):void 
     { 
      assertThat(htmlContentParam, containsString("head")); 
     } 
    } 
} 

Als ich führen Sie diesen Test habe ich die folgende Fehlermeldung angezeigt:

Error: There was an error retrieving the parameters for the testcase: cause invalid value for parameterized field htmlContent: null

Irgendwelche Gedanken darüber, was die Lösung für dieses Problem sein könnte sein könnte?

Antwort

0

Eine Lösung, die ich fand, war, die Tests in der Klasse mit dem Theories Läufer wie unten gezeigt zu laufen.

package flexUnitTests 
{ 
    import helpers.HTMLDataHelper; 

    import org.flexunit.experimental.theories.Theories; 
    import org.flexunit.runners.Parameterized; 
    import org.hamcrest.assertThat; 
    import org.hamcrest.object.equalTo; 
    import org.hamcrest.text.containsString; 

    [RunWith("org.flexunit.experimental.theories.Theories")] 
    public class SimpleTestCase 
    { 
     public static var dataLoader:HTMLDataHelper = new HTMLDataHelper("data/layer.html"); 

     [DataPoint(loader="dataLoader")] 
     public static var htmlContent:String; 

     [Test(dataprovider="htmlContent", description="Tests something.")] 
     public function mustPassThisSimpleTest(htmlContentParam:String):void 
     { 
      assertThat(htmlContentParam, containsString("head")); 
     } 
    } 
} 

jedoch die Nebenwirkung ist, dass alle Tests in der Testklasse wird kryptische Fehlermeldungen angezeigt werden, wenn die Tests fehlschlagen. Zum Beispiel

Error: mustWorkWithRegularTests

anstelle der viel nützlichen

Error: Expected: a string containing "head" 
but: was "this is some text" 

Obwohl dies bedeutet „lösen“ das Problem, das ich habe, IMHO den Handel mit Meldung Klarheit aus nicht wert der Lage ist, wobei Daten zu laden von externen Quellen.