存在-Werror时如何在模块中使用junit5 ExtendWith

问题描述

一个src / main / java / module-info.java,只有一个export子句。

一个src / test / java / example / sometest / AdderTest,其中包含:

package example.sometest;
public class AdderTest {
    @Test
    void test() {
        assertEquals(5,Adder.add(2,3));
    }
}

到目前为止一切顺利。现在,我使用@ExtendWith批注。

package example.sometest;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(NoopTestWatcher.class)
public class AdderTest { ... }

其中

package example.sometest;
import org.junit.jupiter.api.extension.TestWatcher;
public final class NoopTestWatcher implements TestWatcher { }

现在mvn测试给出了错误

[警告] ... / AdderTest.java:[9,2]模块中的org.junit.jupiter.api.extension.ExtendWith类未导出

[警告] /.../NoopTestWatcher.java:[6,41]模块中的org.junit.jupiter.api.extension.TestWatcher接口未导出

[错误] ... / AdderTest.java:找到警告并指定了-Werror

如何使ExtendWith正常工作?

解决方法

我不知道该怎么说,但是在JPMS和Maven下进行测试并不容易或不好。您遇到了一个行家问题,恕我直言gradle does it better,但这是我从所做工作的有限角度来看的观点,我们主要使用gradle ...

您可以使这项工作有效。首先,您需要在module-info.java中使用一个单独的src/test/javaIntellij不会那样),然后您需要在src/main/java中使用不同软件包名称,然后src/test/java(即使项目所有者提供的示例也可以这样做,例如here)。因此,您的Interrupted必须公开-这样漂亮吗?

总体而言,您可以从surefire + JUnit5教程开始,但是如上所述,您需要进行很多更改才能使其生效。您可能不喜欢的更改。您还应该意识到,这个问题并不是新问题,并且模块中的测试通常很复杂。