如何运行模块化多包JUnit测试套件?

xpszyzbs  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(128)

我试图使用JUnit(4)的测试套件特性运行给定(Java-16,模块化)项目中的所有测试(跨许多不同的子包打包);但这比我想象的要困难得多,似乎每个测试(子)包都需要一个-add-opens JVM选项。
MVE是一个带有测试套件的项目mve

package mve.test;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

import mve.test.sub.HelloTest;

@RunWith(Suite.class)
@Suite.SuiteClasses(HelloTest.class)
public class AllTests {
    // Empty by design.
}

字符串
子包mve.test.sub中的(唯一)测试是

package mve.test.sub;

import org.junit.Test;

import mve.main.Hello;

public class HelloTest {
    @Test
    public void test() {
        Hello.main(null);
    }
}


这个项目不输出任何东西,也不需要任何东西,这就是我想保持它的方式。
有没有什么方法可以做到这一点,而不需要为每个子包xxx添加--add-opens mve/mve.test.xxx=ALL-UNNAMED到JVM中?
如果没有,这将是对测试类使用(大量)包的沉重打击。

blmhpbnm

blmhpbnm1#

在Junit 5中,它是这样工作的:
创建一个suite类来运行所有模块的测试,如下所示:

package com.project;

import org.junit.platform.suite.api.SelectModules;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectModules({
  "com.module1",
  "com.module2",
  "com.module3",
})
class AllTests {}

字符串
在每个测试模块中,导出的包必须对Junit打开,例如:

module com.module1
{
  exports com.module1.packageA;
  exports com.module1.packageB;
  
  opens com.module1.packageA to org.junit.platform.commons;
  opens com.module1.packageB to org.junit.platform.commons;
  
  requires org.junit.jupiter.api;
  requires ...
}


当然,每个模块内部都必须有自己的测试。

相关问题