如何在sbt中同时运行Java与Scala的JUnit单元测试
sbt 同时识别运行Java JUnit与Scala单元测试解决方案
1. 修复Java测试类访问权限
JUnit 4要求测试类必须为public修饰,你当前的测试类缺少public修饰符,会被JUnit过滤无法识别:
// 增加public修饰符 @RunWith(Suite.class) @Suite.SuiteClasses({Level2.class}) public class OrganizationRegexModelComponentTester implements ITest{ }
同时确认Level2类中所有带@Test注解的测试方法也符合JUnit 4要求:public修饰、无返回值、无入参。
2. 明确配置sbt测试框架
需要在build.sbt中显式声明同时支持Scala测试框架与JUnit,避免sbt默认只识别单一测试框架:
// 保留原有junit、junit-interface依赖的基础上新增以下配置 testFrameworks ++= Seq(TestFrameworks.ScalaTest, TestFrameworks.JUnit)
3. 确认测试路径配置
sbt默认Java测试源码存放路径为src/test/java,Scala测试源码存放路径为src/test/scala,如果你的Java测试类存放在自定义路径下,需要额外配置源码扫描路径:
// 示例:添加自定义Java测试路径到sbt扫描范围 Test / unmanagedSourceDirectories += baseDirectory.value / "src" / "test" / "custom-java-test-dir"
4. 验证执行方式
配置修改完成后,先在sbt控制台执行reload加载最新配置,再执行对应测试命令:
- 执行所有测试(包含Java和Scala):
sbt test - 执行指定Java JUnit测试类:
sbt "testOnly 全限定类名",例如sbt "testOnly company.extraction.api.util.OrganizationRegexModelComponentTester"
额外注意
如果itest.jar是本地未发布到仓库的jar包,需要确认已经将其加入sbt未托管依赖:
Test / unmanagedJars += file("lib/itest.jar")
把jar包放在项目根目录的lib文件夹下即可。
内容的提问来源于stack exchange,提问作者kiran
相关产品推荐
相关产品推荐

