`

检测是否在运行JUnit单元测试

 
阅读更多

  在写单元测试时遇到一个问题:同一份代码,在单元测试时,我希望他连接到测试数据库;在正式运行时,我希望他连接到正式数据库。

  因此,我要判断当前运行的是测试还是生产环境。

 

  首先,我配置了两套数据库连接环境,一套用于单元测试,一套用于生产环境。

  然后,通过运行时判断是否在运行单元测试,而决定读取哪一套的配置,判断代码为:

public class JUnitUtils {
    private static Boolean isRunningTest = null;

    /**
     * 检测是否在运行单元测试
     * @return
     */
    public static Boolean IsRunningTest() {
        if (null == isRunningTest) {
            StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
            List statckList = Arrays.asList(stackTrace);
            for (Iterator i = statckList.iterator(); i.hasNext(); ) {
                String stackString = i.next().toString();
                if (stackString.lastIndexOf("junit.runners") > -1) {
                    isRunningTest = true;
                    return isRunningTest;
                }
            }
            isRunningTest = false;
            return isRunningTest;
        } else {
            return isRunningTest;
        }
    }
}
 
0
0
分享到:
评论
15 楼 siyuan 2012-11-20  
这个真的可以profile或-D参数就可以解决了
14 楼 aaa1aaaaa 2012-11-07  
使用Derby嘛,也就是Java DB,不久解决了啊
13 楼 zhukewen_java 2012-11-06  
cavenfeng 写道
好像我描述的不太清楚,再完整描述一下这个需求的来源。

首先,我们的工程是Maven的工程,那默认的情况下,package(打包)项目的时候是会运行单元测试的,对吧?

问题就出在这里了,开发人员package项目,有时候会忘记把数据库连接从开发库改回单元测试库的,因此单元测试就会把一些开发库的数据删除,或者插入一些单元测试的数据,这就是我们痛苦的地方。

因此,我就想把单元测试和命令行RUN两种环境完全分开,用不相见!

maven的更好弄了,本身就可以支持不同的profile.当然,人为要破坏是不能够防止的
12 楼 cavenfeng 2012-11-06  
好像我描述的不太清楚,再完整描述一下这个需求的来源。

首先,我们的工程是Maven的工程,那默认的情况下,package(打包)项目的时候是会运行单元测试的,对吧?

问题就出在这里了,开发人员package项目,有时候会忘记把数据库连接从开发库改回单元测试库的,因此单元测试就会把一些开发库的数据删除,或者插入一些单元测试的数据,这就是我们痛苦的地方。

因此,我就想把单元测试和命令行RUN两种环境完全分开,用不相见!
11 楼 mfkvfn 2012-11-06  
cavenfeng 写道
mfkvfn 写道
就搞个配置文件不就行了。平时测试时使用测试数据库。
正式部署时修改下配置文件的内容。

单元测试在持续集成环境自动跑,不能随便修改配置呢


集成环境中配置文件连接测试环境。
正式部署运行时先修改一下配置文件再启动运行不就行了。
10 楼 javatomccsss 2012-11-06  
写得不全啊!
9 楼 zhukewen_java 2012-11-05  
其实可以搞两套配置环境的,单元测试的时候加载用于测试的那一套环境
8 楼 cavenfeng 2012-11-05  
nhyjq 写道
关系搞反了
读哪套配置应该是你执行程序(无论是单元测试还是生产运行)时同时指定的

无论框架级的spring,还是辅助工具ant,maven之类都有执行时指定配置的方法

最不济你执行程序时还能传个环境参数吧,test/production之类,不就好了?

是这样的,被测试的代码里面包含数据库的操作,ORM使用IBatis,IBatis的配置在代码中指向了某个ibatis的配置。
那我需要测试这些代码,在单元测试中没办法修改IBatis的配置呢
7 楼 cavenfeng 2012-11-05  
gosure 写道
框架不应该侵入代码!

是有点bad smell
6 楼 cavenfeng 2012-11-05  
mfkvfn 写道
就搞个配置文件不就行了。平时测试时使用测试数据库。
正式部署时修改下配置文件的内容。

单元测试在持续集成环境自动跑,不能随便修改配置呢
5 楼 cavenfeng 2012-11-05  
shenliuyang 写道
崩溃、、、、     还写几套数据源、、、、   maven中有Profile 这个好东西。

同学,ORM使用IBatis,请问Maven Profile怎么实现JUnit和生产环境读取不同的Profile?
4 楼 shenliuyang 2012-11-05  
崩溃、、、、     还写几套数据源、、、、   maven中有Profile 这个好东西。
3 楼 mfkvfn 2012-11-05  
就搞个配置文件不就行了。平时测试时使用测试数据库。
正式部署时修改下配置文件的内容。
2 楼 nhyjq 2012-11-05  
关系搞反了
读哪套配置应该是你执行程序(无论是单元测试还是生产运行)时同时指定的

无论框架级的spring,还是辅助工具ant,maven之类都有执行时指定配置的方法

最不济你执行程序时还能传个环境参数吧,test/production之类,不就好了?
1 楼 gosure 2012-11-05  
框架不应该侵入代码!

相关推荐

    Junit 单元测试完整案例

    在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例涵盖了Spring和Struts两大框架的单元...

    在Eclipse中使用JUnit4进行单元测试

    创建JUnit测试类是单元测试的第一步。在Eclipse中,右键点击项目,选择"New" > "JUnit Test Case"。在此过程中,需要选择要测试的源代码类以及要测试的方法。测试类通常会继承自`org.junit.Test`注解的基类,并且每...

    Java单元测试JUnit4.7

    在实际使用中,开发人员通常会结合构建工具如Maven或Gradle,以及IDE如Eclipse、IntelliJ IDEA来运行JUnit测试。这些工具能够自动化测试执行,生成测试报告,帮助分析和调试。 总的来说,JUnit 4.7作为Java单元测试...

    junit单元测试示例

    运行JUnit测试非常简单,只需右键点击测试类或测试方法,然后选择“运行As”>“JUnit测试”。IDE将自动执行所有的`@Test`注解的方法,并显示测试结果,包括成功、失败或错误的信息。 总结来说,这个“junit单元测试...

    基于Spring的JUnit单元测试

    在Java开发领域,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)框架之一,而JUnit则是Java语言中进行单元测试的标准库。本篇文章将详细探讨如何在Spring环境中利用...

    JUnit单元测试技术

    在实际项目中,我们通常会结合构建工具如Maven或Gradle来自动化运行JUnit测试,并将测试结果集成到持续集成/持续部署(CI/CD)流程中。这有助于确保每次代码更改后都能快速得到反馈,及时发现和修复问题。 总的来说,...

    Junit单元测试指南

    本指南将深入探讨Junit的使用,帮助你掌握如何编写、运行和理解单元测试。 一、Junit简介 Junit是一个开源的Java测试框架,由Ernst Leiss和Kent Beck共同创建。它基于xUnit测试框架家族,为Java程序员提供了一种...

    junit单元测试及Mock应用,超详细的PPT实战应用

    JUnit是Java编程语言中最流行的单元测试框架,它提供了注解、断言和测试套件等机制,使得编写和运行测试变得简单。JUnit5是当前的最新版本,支持Maven项目管理,并且被广泛集成在现代Java开发环境中,如Spring Boot...

    JUnit单元测试.zip

    JUnit是Java编程语言中广泛使用的单元测试框架,它允许开发者编写可重复执行的测试用例,以验证代码的各个部分是否按预期工作。本资料包提供了进行JUnit单元测试所需的必要组件。 `junit-4.12.jar` 是JUnit 4.12...

    自动饮料机Junit测试(软件测试与质量保证实验).rar

    本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...

    Junit单元测试-实验报告.pdf

    首先,我们要理解实验的目的,即掌握白盒测试方法,设计符合单元测试要求的测试用例,熟练运用JUnit测试工具,并进行代码覆盖率检查。白盒测试是一种基于代码结构的测试方法,关注程序的内部逻辑,而黑盒测试则侧重...

    Java单元测试之JUnit

    在这个"Java单元测试之JUnit"的代码实践中,我们将深入探讨JUnit的基本使用方法以及它在Java项目中的应用。 首先,JUnit是一个开源的、基于Java的测试框架,它允许开发者编写可执行的测试用例来检查代码的功能。...

    Junit 计算器测试

    测试方法通常以`test`开头,并使用`@Test`注解标记,Junit会在运行时自动检测并执行这些方法。 在“计算器测试”的场景中,我们可能有一个计算器类,它包含加法、减法、乘法和除法等基本运算。为了确保这些运算功能...

    Junit单元测试实验报告.pdf

    本实验报告的主要目的是掌握Junit单元测试的方法和技术,并且在Eclipse中进行Junit测试。实验中,我们使用了Calculator类和JUnit测试框架来进行单元测试。 知识点一:JUnit测试框架 JUnit是一个流行的Java单元测试...

    junit单元测试框架

    在“22_android下junit测试框架配置.avi”这个视频文件中,很可能是详细讲解了如何在Android项目中配置和使用JUnit进行单元测试,包括添加依赖、创建测试类、编写测试方法,以及如何运行和查看测试结果。观看这个...

Global site tag (gtag.js) - Google Analytics