Java 11 Юнит Юпитер assertThrows - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь перейти с Java 8 на 11 и получить ошибку в моем тестовом классе, которую я не понимаю.

Мой неудачный (groovy) тест:

@SpringJUnitConfig
class TestSpringBeanScopeChecker {
    @Autowired
    ApplicationContext ctx

    @Test
    void testSingletonFail() {
        Assertions.assertThrows(IllegalStateException.class) {
            SpringBeanScopeChecker.check(ctx, DummyPrototype.class, BeanDefinition.SCOPE_SINGLETON)
        }
    }
}

SpringBeanScopeChecker:

public class SpringBeanScopeChecker {

    private SpringBeanScopeChecker() {}

    public static void check(ApplicationContext ctx, Class<?> type, String scope)
            throws IllegalStateException {

        AbstractApplicationContext actx = (ctx instanceof AbstractApplicationContext) ? 
                ((AbstractApplicationContext) ctx) : 
                new StaticApplicationContext(ctx);

        ConfigurableListableBeanFactory factory = actx.getBeanFactory();

        for (String key : ctx.getBeanNamesForType(type)) {
            BeanDefinition definition = factory.getMergedBeanDefinition(key);

            if (!scope.equals(definition.getScope())) {
                throw new IllegalStateException(
                        "Every spring bean "
                                + "must be request scoped in the bean configuration. The current scope is: "
                                + definition.getScope());
            }
        }
    }
}

Так что для теста я ожидаю IllegalArgumentException. И это нормально работает с Java8. Когда я переключаюсь на Java11 и выполняю тест, я получаю эту ошибку:

[ERROR] testSingletonFail  Time elapsed: 0.009 s  <<< FAILURE!
org.opentest4j.AssertionFailedError: Unexpected exception type thrown
==> expected: <java.lang.IllegalStateException> but was: <java.lang.AbstractMethodError>
         at TestSpringBeanScopeChecker.testSingletonFail(TestSpringBeanScopeChecker.groovy:22)
 Caused by: java.lang.AbstractMethodError: Receiver class
 TestSpringBeanScopeChecker does not define or inherit an
 implementation of the resolved method 'abstract java.lang.Object
 getProperty(java.lang.String)' of interface groovy.lang.GroovyObject.
         at TestSpringBeanScopeChecker.testSingletonFail(TestSpringBeanScopeChecker.groovy:22)

1 Ответ

0 голосов
/ 17 апреля 2020

Если у кого-то есть такая же проблема, я записываю решение для этого. Проблема была в неправильной настройке groovy-eclipse-compiler и groovy-eclipse-batch.

Моя версия groovy управляется подпружиненной загрузкой, и я не обновлял groovy -eclipse-batch согласно groovy.version из подпружиненного pom.

В соответствии с этой проблемой на github :

Вы должны скомпилировать с groovy-eclipse-batch и groovy runtime в той же версии. groovy-eclipse-batch и groovy runtime должны совпадать. Например, batch 2.5.10-0x и runtime 2.5.10 или batch 3.0.1-0x и runtime 3.0.1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...