【问题标题】:Unit testing a plug-in: cannot find symbol errors?单元测试插件:找不到符号错误?
【发布时间】:2023-03-24 12:41:02
【问题描述】:

我正在尝试让我的片段项目对宿主项目中的代码执行单元测试。我正在使用 eclipse、maven 和 osgi。

假设我有两个项目:PluginProject 和 PluginProject.tests。我在 PluginProject.tests 中遇到了奇怪的行为。

如果我将单元测试放在test/<package-name> 中,一切正常,但测试没有执行。

但是,如果我将单元测试放在 src/test/java/<package-name> 中,则无法找到我引用的 PlugingProject 中的任何类(即我尝试测试的任何类)。我总是收到“找不到符号”错误。

注意:我在 PluginProject.test 中的 Manifest.MF 有以下行(除其他外):Fragment-Host: PluginProjectr;bundle-version="0.0.1"

有其他人经历过吗?如有必要,我可以发布更详细的信息。谢谢!

【问题讨论】:

  • 只是想知道您为什么要使用 2 个项目。你可以只使用一个项目, src/main/java 和 src/test/java 吗?
  • 简短的回答是,使用片段项目功能将允许测试主机包,我们将能够分发主机包而不包括测试。
  • 您是否在测试清单中添加了 Junit 捆绑包作为 Require-Bundle ?你在使用 Junit-Plugin 启动器吗?

标签: java unit-testing maven osgi


【解决方案1】:

我推荐的方法,就像@vikingsteve 提到的那样,是拥有一个包含代码和单元测试的项目。

别担心,如果你按照标准方式(src/main/java 和 src/test/java)做一个普通的 mvn packagemvn deploy测试类不会被打包到生成的工件中

【讨论】:

  • 如果您正在使用 OSGi,请不要认为这是一个有效的建议
  • 这就是我对我的捆绑包所做的。我将它们作为 Java 应用程序而不是在 OSGi 容器中进行测试。我知道它可能不适合每个用例,但是 IMO,如果它们真的是 unit 测试,它们应该能够在没有所有 OSGi 接线的情况下独立运行。我会改写答案,因为我不知道官方的方式,所以听起来不那么正式。谢谢
  • 如果您在 OSGi 容器内进行测试,那么这听起来更像是一个集成测试……是的,这将保证另一个模块。但是对于单元测试,我同意 Hilikus - 最好在没有 OSGi 的情况下单独测试代码。
  • @Hilikus 虽然测试类没有与生成的工件打包在一起,但我想只有测试所依赖的依赖项仍然是该捆绑包的一部分?或者将这些依赖项声明为测试范围确保它们没有被捆绑?
  • 当您说捆绑包的一部分时,您的意思是清单中的 import-package 语句?还是maven依赖?您应该将它们声明为具有测试范围的 Maven 依赖项。并且在清单中,它们不会生成 import-package,因为它来自分析工件中的字节码,并且测试不是生成的工件的一部分
猜你喜欢
  • 2019-04-03
  • 2014-01-15
  • 2016-10-17
  • 2023-03-30
  • 1970-01-01
  • 2018-08-05
  • 2019-06-24
  • 2018-12-27
  • 1970-01-01
相关资源
最近更新 更多