当使用带有未检查分配的lambda的assertThatThrownBy时,找不到符号

时间:2018-09-25 09:37:52

标签: java assertj

我正在使用JUnit和AssertJ来测试我的代码,这是测试:

printf()

Foo的代码如下:

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

当我编译以上代码时,会引发错误,这表明javac在AbstractAssert中找不到符号public class Foo { public void abc(Map<Integer, String> ss){ throw new RuntimeException("test"); } } ,但是如果将hasMessageContaining更改为Collections.EMPTY_MAP,一切正常。

似乎new HashMap()返回isInstanceOf而不是AbstractAssert

而且,如果我将lambda更改为匿名类,上述错误也将消失。

那么,我的代码的问题在哪里?

1 个答案:

答案 0 :(得分:0)

问题在于EMPTY_MAP是原始类型(地图),如果您使用emptyMap,它应该可以正常工作。