Не удается найти символ при использовании assertThatThrownBy с лямбдой, чье назначение не проверено - PullRequest
0 голосов
/ 25 сентября 2018

Я использую JUnit и AssertJ для тестирования своего кода, и вот тест:

public class FooTest {
    @Test
    public void test(){
        Foo f = new Foo();
        assertThatThrownBy(() -> f.abc(Collections.EMPTY_MAP)).isInstanceOf(RuntimeException.class)
                .hasMessageContaining("test");
    }
}

код Foo выглядит следующим образом:

public class Foo {
    public void abc(Map<Integer, String> ss){
        throw new RuntimeException("test");
    }
}

Когда я компилируюПриведенный выше код выдает ошибку, которая говорит, что javac не может найти символ hasMessageContaining в AbstractAssert, но если я изменю Collections.EMPTY_MAP на new HashMap(), все работает нормально.

Кажется, что isInstanceOfвозвращает AbstractAssert, а не AbstractThrowableAssert.

И, если я изменю лямбду на анонимный класс, ошибка выше исчезнет либо.

Итак, в чем проблема моего кода?

1 Ответ

0 голосов
/ 26 сентября 2018

проблема в том, что EMPTY_MAP является необработанным типом (Map), если вы используете emptyMap, он должен работать нормально.

...