Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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 如何理解平行关系;“实例”;在testng套件中配置?_Java_Testng - Fatal编程技术网

Java 如何理解平行关系;“实例”;在testng套件中配置?

Java 如何理解平行关系;“实例”;在testng套件中配置?,java,testng,Java,Testng,parallel=“实例”: TestNG将在同一线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同线程中运行 如何理解这个句子?这个问题没有太多的上下文,但谷歌很快找到了答案 您的测试套件将创建不同类的许多实例,然后对它们运行一些测试。这种特殊的并行模式保证,每当您的测试套件在任何create实例上调用多个方法时,都将在同一个线程中完成 为什么这很重要?有些功能可能依赖于一致的线程,例如,如果它们使用ThreadLocal。此外,除非您的实例是线程安全的,否则允许多个线程对其调

parallel=“实例”:

TestNG将在同一线程中运行同一实例中的所有方法,但两个不同实例上的两个方法将在不同线程中运行


如何理解这个句子?

这个问题没有太多的上下文,但谷歌很快找到了答案

您的测试套件将创建不同类的许多实例,然后对它们运行一些测试。这种特殊的并行模式保证,每当您的测试套件在任何create实例上调用多个方法时,都将在同一个线程中完成

为什么这很重要?有些功能可能依赖于一致的线程,例如,如果它们使用
ThreadLocal
。此外,除非您的实例是线程安全的,否则允许多个线程对其调用方法可能会导致干扰


如果您不确定线程安全的说法是什么,那么您可能不希望并行运行测试套件。或者将其限制为
parallel=“tests”
,并确保测试标记之间有明确的分隔。

TestNG的默认行为是根本不使用并行线程

parallel
属性设置套件在使用并行线程时执行其方法的方式

为清晰起见,考虑一个测试类:

public class StuffTest {
    @Test
    public void doStuffTest() {
        // do your thing
    }
}
默认情况下(无平行):

  • 每次测试运行时将创建一个新的
    StuffTest
    (比如
    st
    )实例;及
  • st
    的每个方法都将按顺序执行(顺序取决于其他设置)
使用
parallel
属性时,TestNG将同时使用并行线程运行测试。(并行
parallel
的值将设置这些线程如何处理测试类实例和方法

parallel=“instances”
表示如果您有多个
StuffTest
的实例(比如
sa
sb
):

  • 实例
    sa
    的所有方法都将在同一个线程中执行(比如线程
    ta
  • 实例sb的所有方法都将在同一个线程中执行(比如thread
    tb
  • ta
    !=
    tb

您的答案太模糊,因为您无法说明TestNG将如何/何时实例化多个实例。如果TestNG决定为每个方法实例化一个类,那么这个执行模型将相当于
parallel=“method”
@CedricBeust谁决定创建每个类的实例数?(如有可能,请澄清官方文件)