Запись параметризованного теста завершается неудачно с: Произошла ошибка при получении параметров для тестового случая: причина неверного значения для параметризованного поля - PullRequest
0 голосов
/ 28 марта 2012

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

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

Примечание. Этот код основан на примере TestNG .

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"));
        }
    }
}
* 1011.* Когда я запускаю этот тест, я получаю следующее сообщение об ошибке:

Ошибка: произошла ошибка при получении параметров для тестового случая: причина неверного значения для параметризованного поля htmlContent: null

Есть какие-нибудь мысли о том, что может быть решением этой проблемы?

1 Ответ

0 голосов
/ 28 марта 2012

Одним из решений, которое я нашел, было выполнение тестов в классе с помощью бегуна 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"));
        }
    }
}

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

Ошибка: mustWorkWithRegularTests

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

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

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

...