我们在Eclipse中遇到导入问题:

测试类使用Assertions.assertThat

当按Ctrl + Shift + O组织导入时,Eclipse用StrictAssertions.assertThat替换Assertions.assertThat。

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.Test;

public class TheTest {

    @Test
    public void testName() {
        assertThat(2).isEqualTo(2);
    }
}


被替换为:

import static org.assertj.core.api.StrictAssertions.assertThat;  // change here !

import org.junit.Test;

public class TheTest {

    @Test
    public void testName() {
        assertThat(2).isEqualTo(2);
    }
}


当我们有一些仅在断言中的特定断言时(对于列表),Eclipse将StrictAssertions添加到导入中。

import static org.assertj.core.api.Assertions.assertThat;

import java.util.ArrayList;

import org.junit.Test;

public class TheTest {

    @Test
    public void testName() {
        assertThat(2).isEqualTo(2);
        assertThat(new ArrayList<>()).isEmpty();
    }
}


更改为:

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.StrictAssertions.assertThat;  // this import was added

import java.util.ArrayList;

import org.junit.Test;

public class TheTest {

    @Test
    public void testName() {
        assertThat(2).isEqualTo(2);
        assertThat(new ArrayList<>()).isEmpty();
    }
}


看来Assertions扩展了StrictAssertions,因此使用StrictAssertions没问题,但是为什么Eclipse不使用扩展类呢?

最佳答案

看起来,由于assertThat(int actual)是在StrictAssertions中定义的,并且未被Assertions隐藏,因此Eclipse决定从StrictAssertions导入。

另外,对于组织导入,Eclipse似乎忽略了类型过滤器-即便那样也无济于事。


  断言似乎扩展了StrictAssertions,因此使用StrictAssertions没问题


不适用于您当前的设置,但是StrictAssertions已被AssertJ 3.2.0删除。因此,升级到AssertJ StrictAssertions的较新版本时,您会遇到麻烦。

如果您的项目可以,我建议您升级到3.2.0或更高版本。

10-05 18:24