Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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 选择执行JUnit测试的顺序_Java_Netbeans_Junit_Testing - Fatal编程技术网

Java 选择执行JUnit测试的顺序

Java 选择执行JUnit测试的顺序,java,netbeans,junit,testing,Java,Netbeans,Junit,Testing,我想选择执行JUnit测试的顺序。 我有4个类,其中有几个测试方法,我的目标是执行,例如,类A的方法Y,然后是类B的方法X,最后是类A的方法Z 您能帮忙吗?这个问题的JUnit答案是创建一种如下的测试方法: @Test public void testAll() { classA.y(); classB.x(); classA.z(); } 在某些情况下(设置和拆卸很重要),这显然是一个不令人满意的答案,但是JUnit对单元测试的看法是,如果测

我想选择执行JUnit测试的顺序。 我有4个类,其中有几个测试方法,我的目标是执行,例如,类A的方法Y,然后是类B的方法X,最后是类A的方法Z


您能帮忙吗?

这个问题的JUnit答案是创建一种如下的测试方法:

  @Test public void testAll() {
       classA.y();
       classB.x();
       classA.z();
  }
在某些情况下(设置和拆卸很重要),这显然是一个不令人满意的答案,但是JUnit对单元测试的看法是,如果测试不是独立的,那么您就做错了


如果上面的内容不能满足您的需要,请查看TestNG。

如果前面的答案不令人满意,我注意到Sun JVM JUnit似乎总是按照定义的顺序执行单元测试。
显然,依赖它不是一个好主意。

创建一个测试套件,并按所需顺序调用测试方法@Yishai是正确的,JUnit的设计使每个测试都是独立的。因此,如果您正在调用可以独立运行的测试方法,那么创建一个TestSuite来覆盖特定调用顺序的场景应该没有问题。

一般来说,您不能指定单独单元测试的运行顺序(尽管您可以在TestNG中指定优先级,并为每个测试指定不同的优先级)。但是,单元测试应该能够独立运行,所以测试的顺序应该无关紧要。这是个坏习惯。如果您需要按照特定的顺序进行测试,那么您应该重新考虑您的设计。如果您发布有关您为什么需要订单的详细信息,我相信我们可以提供建议。

您可能会感兴趣:


使用相互依存测试进行测试的另一种方法。

关于测试可以按任意顺序进行的一般评论/想法太强了

这真的取决于你在测试什么

例如,我正在测试一个服务器,其中有一个changePassword操作

我认为很明显,测试的顺序是至关重要的。在changePassword之后,旧密码不再有效,而在此之前,它确实有效


我不想在每次测试后恢复服务器状态,这需要做太多的工作。我可以在所有测试完成后执行一次。

从4.11版开始,您可以使用注释和方法名称指定执行顺序:

import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {

    @Test
    public void test1Create() {
        System.out.println("first");
    }

    @Test
    public void test2Update() {
        System.out.println("second");
    }
}

您可以使用@Order()注释

+1,尽管我认为这个建议的措辞不够强硬。单元测试应该能够独立运行;这是最基本的。如果你的不是,那你就做错了。好吧。。。我是新来的。。。所以问题是:我在使用OpenKM(一个文档管理系统),我有一个测试文件夹操作的类,即测试文件夹的创建、重命名和删除。那么你是说创建、重命名和删除都必须在同一个方法上,而不是分开并依赖于前一个方法?通常你会有一个设置和删除方法,将文件夹置于已知状态。例如,setup方法可以创建一个文件夹(如果该文件夹仍然存在,则将其删除)。您的删除和重命名测试可以在该文件夹上运行。create测试可以验证文件夹是否在安装方法中正确创建,或者它可以创建一个全新的文件夹(或在安装方法中创建的文件夹的子文件夹)。仅供将来的读者参考,Java 7之前的JVM似乎是这样的,但由于Java 7,顺序是非确定性随机的。但是JUnit4.11+使用FixMethodOrder注释定义订单的能力有限,你是对的。但它将再次基于ASCII代码执行。因此,“A”将在“A”之前执行。但这是正确的答案。当使用
@FixMethodOrder
进行注释时,方法的顺序将被遵守。如果您对此答案添加更多详细信息,人们会发现它更有用