首页 > 解决方案 > 为什么 testng 将属性 a 分配给相同的地址?

问题描述

有 2 个类,Base.java 和 Demo.java。

public class Base {

    public A a;

    @BeforeMethod
    public void beforeMethod() {
        a = new A();
        System.out.println(Thread.currentThread().getName() + " a -------" + a);
    }
}

以下是Demo.java

public class Demo extends Base {
    @Test
    public void test(){
        System.out.println("11111111111");
    }

    @Test
    public void test2(){
        System.out.println("2222222222");
    }
}

以下是我的xml:

<suite name="Integration" parallel="methods" thread-count="2">
    <test name="1">
        <classes>
            <class name="example.Demo"/>
        </classes>
    </test>
</suite>

当我键入命令时:

mvn clean test

输出如下:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
TestNG-test=1-2 a -------example.A@18e702c8
TestNG-test=1-1 a -------example.A@18e702c8
2222222222
11111111111
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.278 sec


我们可以看到有 2 个线程:TestNG-test=1-2TestNG-test=1-1,但是为什么 2 个不同线程中的变量“a”具有相同的地址“example.A@18e702c8”?

我认为beforeMethod()在 Base.java 中会被调用 2 次,因为 Demo.java 中有两个方法,所以变量“a”应该有 2 个不同的独立值。

但实际上,它并没有像我想象的那样执行。有人可以帮忙解决吗?

标签: javatestng

解决方案


推荐阅读