Junit单元测试碰到静态变量如何处理

栏目: 编程工具 · 发布时间: 7年前

内容简介:写单元测试用例,是程序员的好习惯,写java程序,一般使用Junit写单元测试。我在写单元测试用例到时候,遇到一个问题:Junit在整个project中是一个java进程,如果你的程序里涉及静态变量,就会导致两个单元测试类之间相互影响。你可以每次beforeClass初始化静态变量,但是有时候依赖了很多开源软件,你都不知道究竟一个测试流程里用到了哪些静态变量,甚至不知道如何还原它们。

写单元测试用例,是 程序员 的好习惯,写 java 程序,一般使用Junit写单元测试。

我在写单元测试用例到时候,遇到一个问题:Junit在整个project中是一个java进程,如果你的程序里涉及静态变量,就会导致两个单元测试类之间相互影响。

你可以每次beforeClass初始化静态变量,但是有时候依赖了很多开源软件,你都不知道究竟一个测试流程里用到了哪些静态变量,甚至不知道如何还原它们。

最有效直接的办法就是每个测试用例都使用一个独立的classloader,也就是说每个test case都是类隔离的。

参考 https://stackoverflow.com/questions/42102/using-different-classloaders-for-different-junit-tests 这篇帖子里的回复。实现了这个功能。

具体源码:

https://github.com/johnyannj/junit-alone

用法如下:

maven引入依赖

<dependency>
    <groupId>com.zhaoyanblog</groupId>
    <artifactId>junit-alone</artifactId>
    <version>1.0.1-SNAPSHOT</version>
</dependency>

在你的测试用例中,用AloneRunner代替你原来真实的Runner,并把你真实的Runner,设置给@AloneWith

@RunWith(AloneRunner.class)
@AloneWith(JUnit4.class)
public class JunitAloneTest {
    @Test
    public void test() {
        StaticClass.staticNum++;
        Assert.assertEquals(1, StaticClass.staticNum);
    }
}

这样你的测试用例就会使用一个独立的classloader来执行了, 试试看吧。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

实战移动互联网营销

实战移动互联网营销

江礼坤 / 机械工业出版社 / 2016-1 / 79.00

移动互联网的兴起,又为企业带来了新的挑战与机遇!越来越多的人,看到了移动互联网的价值与前景,但是在具体操作时,移动互联网具体如何玩?企业如何向移动互联网转型?如何通过移动互联网做营销?等等一系列问题,接踵而至。虽然目前相关的资料和文章很多,但是都过于零散,让人看完后,还是无从下手。而本书旨在成为移动互联网营销领域标准的工具书、参考书,为大家呈现一个系统、全面的移动互联网营销体系。让大家从思维模式到......一起来看看 《实战移动互联网营销》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具