Я пытаюсь поднять существующий проект с 3.0.2 до 5.5.0. У проекта есть пользовательская реализация getDescription () в классе бегуна Cucumber. java, и функциональность должна поддерживаться, поскольку она имеет зависимости в других проектах. Версия JUnit: 4.12.
. В версии 3.0.2 класс бегуна Cucumber. java определен в cucumber.api.junit.Cucumber как
public class Cucumber extends ParentRunner<FeatureRunner>
* 1007. * что делает пользовательского бегуна довольно простым:
public class DescriptiveCucumberRunner extends Cucumber
{
public DescriptiveCucumberRunner(Class<?> testClass) throws InitializationError, IOException
{
super(testClass);
}
@Override
public Description getDescription()
{
String text = "Cucumber tests running on " + new Date();
Description originalDescription = super.getDescription();
Description newDescription = originalDescription.childlessCopy();
newDescription.addChild(Description.createSuiteDescription(text));
for(Description childDescription : originalDescription.getChildren())
{
newDescription.getChildren().get(0).addChild(childDescription);
}
return newDescription;
}
}
В 5.0.0 класс бегуна Cucumber. java был перемещен в io.cucumber.junit.Cucumber и определение было изменено на
public final class Cucumber extends ParentRunner<ParentRunner<?>>
, поэтому я больше не могу расширять.
Я пытался расширить org.junit.runners.ParentRunner
public class DescriptiveCucumberRunner extends ParentRunner<Cucumber>
и агрегирование с делегатом, но поскольку методы Cucumber. java защищены, мне, по сути, пришлось бы скопировать весь класс, чтобы сохранить текущие функциональные возможности, что на самом деле не было бы решением вообще. Я мог бы использовать рефлексию для вызова методов, определенных в Cucumber. java, но это тоже не совсем понятно.
Кто-нибудь знает, как это сделать, не требуя изменений в других проектах? Может быть, есть намеренный способ сделать это с огурцом, который я не замечаю? Надеюсь, мне просто не хватает очевидного решения, но пока я рисую пробел.