Запись параметризованного теста завершается неудачно с: Произошла ошибка при получении параметров для тестового случая: причина неверного значения для параметризованного поля
У меня есть несколько модульных тестов, которые требуют очень больших строк для тестовых данных. Я не хочу объявлять строку 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"));
}
}
}
Когда я запускаю этот тест, я получаю следующее сообщение об ошибке:
Ошибка: при получении параметров для тестового случая произошла ошибка: причина неверного значения для параметризованного поля htmlContent: null
Любые мысли о том, что может быть решением этой проблемы может быть?
1 ответ
Одно решение, которое я нашел, состояло в том, чтобы запустить тесты в классе с 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, компромисс между ясностью сообщений не стоит того, чтобы загружать данные из внешних источников.