如何为java_test_suite添加源文件?解决测试类依赖缺失问题
解决java_test_suite中继承抽象测试类找不到的问题
问题核心是BaseTimerTests未被纳入每个自动生成的java_test的依赖范围。java_test_suite会为每个匹配后缀的测试文件单独生成java_test目标,若抽象类不在该目标的源码或依赖中,就会出现类找不到的错误。
以下是具体解决方法:
方法一:将抽象测试类打包为单独的测试库(推荐)
把BaseTimerTests这类公共测试基类封装成java_library,让所有需要它的测试目标依赖这个库:
- 在BUILD文件中添加测试基类的library目标:
java_library( name = "test-base", srcs = ["src/test/java/com/your/package/BaseTimerTests.java"], # 替换为实际文件路径 deps = JUNIT5_DEPS + [":everything"] + deps, # 包含基类所需的所有依赖 )
- 修改原
java_test_suite配置,添加这个库的依赖,并排除基类避免生成无效测试:
java_test_suite( name = "everything-tests", srcs = glob( ["src/test/java/**/*.java"], exclude = ["src/test/java/com/your/package/BaseTimerTests.java"] # 排除基类,防止生成抽象类的测试 ), runner = "junit5", test_suffixes = ["Tests.java"], runtime_deps = JUNIT5_DEPS, deps = [ ":everything", ":test-base", # 引入测试基类库 ... ] + deps, )
方法二:调整srcs范围并排除基类的测试生成(仅适用于简单场景)
如果不想单独建library,也可以直接把基类包含在srcs中,但需避免为它生成测试目标:
- 若
BaseTimerTests的文件名不符合Tests.java后缀:确保它被glob(["src/test/java/**/*.java"])包含,这样每个生成的java_test都会自动带上这个文件作为源码,无需额外依赖。 - 若
BaseTimerTests的文件名符合Tests.java后缀:必须用exclude参数把它从srcs中排除,保证不会生成针对抽象类的无效测试。
内容的提问来源于stack exchange,提问作者90abyss
相关产品推荐
相关产品推荐

