Попытка создания некоторых вариантов создания правил в файле groovy, я пришел к мысли, что @Rule не описывает ДЕКЛАРАЦИЮ, а ASSIGNMENT. Итак, бегун, загружая тест, старается каждое правило для правильного назначения.Какова логика объявления и присвоения @Rule (JUnit) в классе Groovy
//Correct variants:
@Rule
public ErrorCollector collector1= new ErrorCollector();
public ErrorCollector collector2= null;
@Rule
collector2= new ErrorCollector();
public ErrorCollector collector3;
@Rule
collector3= new ErrorCollector();
// incorrect variants:
@Rule
public ErrorCollector collector4= null;
@Rule
public ErrorCollector collector5;
@Rule
public ErrorCollector collector5=somethingThatIsNotRule;
@Rule
public ErrorCollector collector5=anotherRule;
Но, тогда я пришел к некоторым paradoxial вариантов:
//these lines are not only taken by the runner, but also passed without errors:
public ErrorCollector collector6;
{
@Rule
collector6= null;
}
public ErrorCollector collector7=null;
{
@Rule
collector7= null;
}
Какова логика этого?
Кажется, что ошибка в Runner - бегун делает чрезмерную проверку перед конструированием теста.
Невозможно, если вы посмотрите на аннотацию '@ Rule', у нее есть цели' FILED' & 'METHOD'. Ваш парадоксальный вариант не должен компилироваться, потому что по существу это полевое назначение внутри блока инициализатора экземпляра, а не объявление поля. –
ну, я могу только предположить, что есть ошибка в компиляторе Eclipse. Этот фрагмент кода не компилируется в IntelliJ Idea –
Да, извините, я забыл упомянуть, что все это сделано в groovy file - groovy не так строг, как java - отредактирован. – Gangnus