java junit @Test 变量共享问题 --springboot 中的Controller静态变量可以共享

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

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

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

====百度搜索==

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

 

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

比如给我改成下方的:

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

package com.abc.clptest;

import org.junit.Test;

import java.util.concurrent.TimeUnit;

public class ShareVariableTest {
    private static int id=0;

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

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

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

test1中输出值一直累加,

test1:1
test1:2
test1:3
test1:4
test1: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

 

 

 

posted @ 2021-08-09 21:59  海蓝7  阅读(1349)  评论(0编辑  收藏  举报