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

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

内容简介:写单元测试用例,是程序员的好习惯,写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来执行了, 试试看吧。


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

查看所有标签

猜你喜欢:

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

Web Anatomy

Web Anatomy

Robert Hoekman Jr.、Jared Spool / New Riders / 2009-12-11 / USD 39.99

At the start of every web design project, the ongoing struggles reappear. We want to design highly usable and self-evident applications, but we also want to devise innovative, compelling, and exciting......一起来看看 《Web Anatomy》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

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

RGB CMYK 互转工具