Unit testing 主意在另一个模块中导入模块

Unit testing 主意在另一个模块中导入模块,unit-testing,maven,dependency-management,Unit Testing,Maven,Dependency Management,我有一个多模块项目,不幸的是,一个模块的测试依赖于另一个模块的测试,如下所示: Module A public class TestA {...} public class SomeClassA {...} Module B public class TestB extends TestA { private SomeClassA instanceOfA; ..... } 模块的B pom.xml中存在依赖关系: <dependency> &

我有一个多模块项目,不幸的是,一个模块的测试依赖于另一个模块的测试,如下所示:

Module A
public class TestA {...}
public class SomeClassA {...}

Module B
public class TestB extends TestA {
  private SomeClassA instanceOfA;
     .....
}
模块的B pom.xml中存在依赖关系:

    <dependency>
        <groupId>id</groupId>
        <artifactId>module_A</artifactId>
        <type>jar</type>
        <scope>provided</scope>
    </dependency>

身份证件
模块A
罐子
假如
如果我打开项目设置(ctrl+alt+shift+s),模块B依赖项选项卡中有模块A(如果这很重要,它有范围编译)。 因此,看起来我有有效的依赖项,但当我尝试运行测试时,会出现多个错误,据我所知,主要错误如下:

TestB类型的层次结构不一致

另外两个错误和构造函数有关,它们很可能是层次结构混乱的结果

如果我在模块B中导出模块A,并使用指向模块B的类路径运行测试,并选中«添加导出…»和«添加所需…»,那么同样的测试也可以从eclipse中完美运行


在IDEA中是否可以将一个包含所有库的模块导入另一个模块?

这里的问题是eclipse,与maven和IntelliJ相比,eclipse对您的项目构建过于宽松。Eclipse会自己解决问题,为了帮助您解决问题,它甚至会解决您在POM中没有告诉它要做的事情。IntelliJ尝试按原样使用POM,并且不会猜测。由你自己决定哪种方法最终更有帮助。就个人而言,我想要可移植的构建,所以我更喜欢IntelliJ方法

在这种情况下,您应该将模块A中的测试作为一个单独的测试jar导出,并让模块B使用测试依赖关系依赖它。我不会在这里详细介绍如何实现这一点,因为在中有很好的文档记录

你的最后一个问题是一个单独的问题,应该放在一个更详细的单独问题中。您可能正在寻找POM导入,或者如何使用Shade插件


最后,我要避免在开发初期使用
test
以外的作用域。使用
提供的
可能会遇到很多麻烦,因为这不仅意味着容器提供了库,而且还意味着您不接受可传递的依赖项,而且这两种情况都可能导致意外的副作用。

您的maven配置不正确。您需要将模块A中的测试作为单独的库(jar)导出,然后在模块B中对其具有测试依赖关系。在上面的依赖关系中,jar类型是默认类型,因此不需要。Eclipse在pom方面表现不好,因此您会感到困惑。IntelliJ的行为是正确的。最后,这个问题与您的IDE无关,它是一个关于配置测试依赖项的maven问题。这里的第二个答案将提供一个解决方案:@EngineerDollery如果您将其作为答案,我将接受您的答案