2012-03-27 1 views
0

У меня есть несколько модульных тестов, для которых требуются очень большие строки для тестовых данных. Я не хочу объявлять строку HTML в самом тесте, поскольку это может затушевать этот фактический тест. Скорее, я хотел бы загрузить эти строки из внешнего ресурса для каждого теста.Запись параметризованного теста завершается с ошибкой: произошла ошибка, возвращающая параметры для тестового теста: причина недопустимого значения для поля с параметрами

Хотя я не выполняю те же тесты с разными наборами данных, параметризованные тесты выглядят жизнеспособным решением; однако мне трудно получить следующий пример для работы.

Примечание: Этот код основан на 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")); 
     } 
    } 
} 

Когда я запускаю этот тест я получаю следующее сообщение об ошибке:

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

Любые мысли относительно того, что могло бы стать решением этой проблемы могло бы быть?

ответ

0

Одним из решений, которое я нашел, было выполнение тестов в классе с помощью бегуна Theories, как показано ниже.

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

Однако побочным эффектом является то, что все тесты в рамках тестового класса будут отображаться сообщения об ошибках, когда тесты терпят неудачу. Например,

Error: mustWorkWithRegularTests

вместо гораздо более полезным

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

Хотя это «решить» проблему у меня был, имхо компромисс в ясности сообщения не стоит быть в состоянии загрузить данные из внешних источников.