Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit4套件被忽略(Eclipse和Maven)_Java_Eclipse_Maven_Junit - Fatal编程技术网

Java JUnit4套件被忽略(Eclipse和Maven)

Java JUnit4套件被忽略(Eclipse和Maven),java,eclipse,maven,junit,Java,Eclipse,Maven,Junit,我有两个测试类和一个初始化一些公共资源的套件。在所有类中都有用@BeforeClass注释的方法-套件和两个测试类,只有套件中才有@AfterClass 当我从Eclipse中作为一个单独的测试类运行一套测试时,它工作得很好,但是当我尝试运行项目中的所有测试时,顺序是无效的。出于某种原因,Eclipse尝试先运行测试(由于资源尚未初始化而失败),然后才运行套件本身。 马文似乎也忽视了这件诉讼。我如何配置Maven和Eclipse以正确的顺序(首先适合)运行测试,而不是从套件外部运行这些测试 这不

我有两个测试类和一个初始化一些公共资源的套件。在所有类中都有用
@BeforeClass
注释的方法-套件和两个测试类,只有套件中才有
@AfterClass

当我从Eclipse中作为一个单独的测试类运行一套测试时,它工作得很好,但是当我尝试运行项目中的所有测试时,顺序是无效的。出于某种原因,Eclipse尝试先运行测试(由于资源尚未初始化而失败),然后才运行套件本身。 马文似乎也忽视了这件诉讼。我如何配置Maven和Eclipse以正确的顺序(首先适合)运行测试,而不是从套件外部运行这些测试

这不是代码复制的问题。问题在于无法连续快速初始化和销毁的资源。这就是为什么我需要一个只初始化资源一次的套件


谢谢。

在每个测试类中添加带有@BeforeClass和@AfterClass的代码


如果您有许多类要测试,请将测试套件抽象化,并确保所有需要tre逻辑的类都继承自测试套件。

将带有@BeforeClass和@AfterClass的代码放在每个测试类别中


如果您有许多类要测试,请将测试套件抽象化,并确保所有需要tre逻辑的类都继承自测试套件。

您使用套件进行拆卸会导致问题,原因有很多,但具体来说,您无法预测Eclipse(或Maven)的顺序将执行您的测试。要获得更全面的解释,请参阅我的答案,但由于Eclipse和maven是通过反射(注释)查找类的,因此您无法保证类的查找顺序。[*您可以使用maven和runOrder,请参见下面的第3点]

Eclipse(和Maven)将套件视为测试,它是通过相同的机制发现和运行的,它们的执行顺序高度依赖于JVM

因此,如果您有套件A(其中包含测试B和C)和测试D,那么您将执行以下操作(以不可预测的顺序):

通常,您应该尝试保持对称,在同一位置进行设置/拆卸

因此,您有以下选项:

  • 仅使用@BeforeClass/@AfterClass(或更好的@ClassRule,ExternalResource),并删除您的测试套件。这是最干净的选项,因为您正在为每个测试类进行设置
  • 仅从Eclipse运行测试套件,并在Maven中使用。请注意,如果您只运行过测试套件,那么最好在套件中进行设置,而不是在每个类中进行设置。但是,当只从Eclipse运行一个测试时,就会出现问题
  • 按特定顺序运行测试。这不能在Eclipse中完成,但可以在Maven中完成,请参阅。你必须有一些命名约定
  • 使用,它显式地支持类的排序,并且可能更容易使用要运行的类列表进行设置,但是在设置/拆卸时仍然会遇到同样的问题

  • 您使用套件进行拆卸会给您带来问题,原因有很多,但具体来说,您无法预测Eclipse(或Maven)执行测试的顺序。要获得更全面的解释,请参阅我的答案,但由于Eclipse和maven是通过反射(注释)查找类的,因此您无法保证类的查找顺序。[*您可以使用maven和runOrder,请参见下面的第3点]

    Eclipse(和Maven)将套件视为测试,它是通过相同的机制发现和运行的,它们的执行顺序高度依赖于JVM

    因此,如果您有套件A(其中包含测试B和C)和测试D,那么您将执行以下操作(以不可预测的顺序):

    通常,您应该尝试保持对称,在同一位置进行设置/拆卸

    因此,您有以下选项:

  • 仅使用@BeforeClass/@AfterClass(或更好的@ClassRule,ExternalResource),并删除您的测试套件。这是最干净的选项,因为您正在为每个测试类进行设置
  • 仅从Eclipse运行测试套件,并在Maven中使用。请注意,如果您只运行过测试套件,那么最好在套件中进行设置,而不是在每个类中进行设置。但是,当只从Eclipse运行一个测试时,就会出现问题
  • 按特定顺序运行测试。这不能在Eclipse中完成,但可以在Maven中完成,请参阅。你必须有一些命名约定
  • 使用,它显式地支持类的排序,并且可能更容易使用要运行的类列表进行设置,但是在设置/拆卸时仍然会遇到同样的问题

  • 这并不是对你的问题的回答,但一般来说,你应该编写测试,这样每个测试都是独立的,这样测试就可以独立运行,这样顺序就不重要了,但在这种情况下,我不能多次初始化资源。是否可以检查资源是否已初始化,如果已初始化,是否可以跳过初始化?这不是对您问题的回答,但是一般来说,你应该编写测试,这样每个测试都是独立的,这样测试就可以独立运行,这样顺序就不重要了,但在这种情况下,我不能多次初始化资源。是否可以检查资源是否已初始化,如果已初始化,是否可以跳过初始化?请参阅更新。这不是代码重复的问题。请查看更新。这不是代码重复的问题。我明白你的意思。对诉讼没有真正的支持。那么我不明白,如果没有人知道如何正确地使用它,为什么Junit还要为它的支持而烦恼呢?此外,我不会称之为真正的扫描技术挑战
    A (which will execute B & C)
    B
    C
    D