问题背景:我贪图test 方便启动不同的进程(也方便停止),对应的控制台输出,但我没有测试 又希望相互共享数据。

如果启动一个springboot,通过controller 来启动不同方法,控制台不方便看也不方便停止某一个(因为一直在循环执行监控东西)。

所以还是想在test中,又能共享变量。

====百度搜索==

junit多个测试方法共享变量_不负韶华,只争朝夕!-CSDN博客---本文中不符合我的需求
https://blog.csdn.net/IndexMan/article/details/85004828

----上面是整个类测试下来 才能拿到test1的修改的值。。  单独运行每一个test,而能共享变量吗? 验证test 2 3 拿到的都是0.

比如给我改成下方的:

要求先单独运行test1,然后在分别单独启动 test2 test3.。对应的使用情景就是:一个测试案例不断更新一个值,希望给另外的测试案例持续使用。

packagecom.abc.clptest;importorg.junit.Test;importjava.util.concurrent.TimeUnit;public classShareVariableTest {private static int id=0;

@Test
public void test1() throwsInterruptedException {
id
=1;
System.out.println(
"test1:"+id);while (true){ TimeUnit.SECONDS.sleep(2);
id
++;
System.out.println(
"test1:"+id);
}
}

@Test
public voidtest2(){
System.out.println(
"test2:"+id);
}

@Test
public void test3()throwsInterruptedException{
System.out.println(
"test3:"+id);while (true){ TimeUnit.SECONDS.sleep(2);
System.out.println(
"test3:"+id);
}
}
}

test1中输出值一直累加,

test1:1test1:2test1:3test1:4test1:5

但 test2 test3 拿到的一直都是0

test3:0
test3:0
test3:0

==》 就算单独启动test 创建了多个实例,里面的静态变量不都是只有一份吗?

拓展: 而springboot 中的Controller 就可以共享变量

多个http请求可以共用其中的静态变量值

--------------

后面,改成了读取  Properties 配置文件了。呵呵

读取共享内存 还没有学会。

后来我再改进测试,

既然读取本地的static 静态变量不可以,

那么静态变量的一个类里面的一个普通属性可以吗?不可以,

那么静态变量的一个类里面的一个静态属性可以吗?不可以,

静态对象 里面有个静态属性

反正不能成功。

结案:

2021-9-6 16:14:25更新:看来实现不了,

JUnit会在调用每个@Test方法之前创建测试类的新实例。这有助于提供测试方法之间的独立性,并避免测试代码中的意外副作用。因为每个测试方法都在新的测试类实例上运行,所以我们无法在所有测试方法之间重用实例变量值。

更新 2021-9-6 16:38:59 看到这文章又看到了希望

JUnit 中是以测试方法为一个独立的生命周期 | 隔叶黄莺 Yanbin Blog - 软件编程实践
https://yanbin.blog/junit-test-instance-lifecycle/#more-8281

搜索关键字:ConcurrentTestRunner  能看到 ,新的方法使用JUnit测试多线程代码

JUnit 5 User Guide
https://junit.org/junit5/docs/snapshot/user-guide/#writing-tests-test-instance-lifecycle

需要更改生命周期,搜索:并发执行。。。

JUnit 5中的@TestInstance注释有什么用? - IT屋-程序员软件开发技术分享社区
https://www.it1352.com/1520183.html

标签: none

添加新评论