使用junit&spring修改系统的环境变量,解决docker程序测试问题
2016-10-10 21:28
1046 查看
1,修改系统环境变量
首先环境变量在java运行的时候是修改不了的。已经设置成只读了虽然方法都能调用。
这个有啥用呢?因为docker开放的应用程序的环境变量都是这样设置的。
docker在启动的时候设置了环境变量,然后应用程序就可以直接调用了。
调用的方法java就是通过 System.getenv()获得的。
有spring的程序,直接使用${jdbc.url}写在xml的配置文件就好。
spring已经支出从系统环境变量里面获得参数了。
System.out.println(System.getenv("test.env")); //如果使用:会报错异常。 System.getenv().put("test.env","1234");
2,解决办法
http://stackoverflow.com/questions/8168884/how-to-test-code-dependent-on-environment-variables-using-junit使用一个开源框架:
https://github.com/stefanbirkner/system-rules
增加maven配置:这两个包必须引用,否则类找不到。
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://github.com/stefanbirkner/system-rules --> <dependency> <groupId>com.github.stefanbirkner</groupId> <artifactId>system-rules</artifactId> <version>1.16.1</version> <scope>test</scope> </dependency>
3,代码编写
将两个maven配置修改后就可以测试了。import org.junit.Test; import org.junit.Rule; import org.junit.contrib.java.lang.system.EnvironmentVariables; public void EnvironmentVariablesTest { @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); @Test public void setEnvironmentVariable() { environmentVariables.set("name", "value"); assertEquals("value", System.getenv("name")); } }
可以直接修改系统的环境变量。
5, 和spring结合
但是,但是,对应普通函数是可以的,但是对于spring的函数是不行的。因为在这个类里面进行配置之后,spring已经启动完成了。还是没有获得环境变量。
解决办法,创建一个自己的MySpringJUnit4ClassRunner 类:
import org.junit.Rule; import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.junit.runners.model.InitializationError; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner { @Rule public final EnvironmentVariables environmentVariables = new EnvironmentVariables(); public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError { super(clazz); //http://stefanbirkner.github.io/system-rules/#EnvironmentVariables environmentVariables.set("name", "value"); } }
替换@RunWith(MySpringJUnit4ClassRunner.class)就可以了。
import org.junit.Test; import org.junit.Rule; import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(MySpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:META-INF/spring/*.xml"}) public void EnvironmentVariablesTest { @Test public void setEnvironmentVariable() { assertEquals("value", System.getenv("name")); } }
这样在启动的时候就使用了自己的类进行加载了。
在spring配置:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean>
在junit里面就可以使用了。
5,总结
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/52781896 未经博主允许不得转载。博主地址是:http://blog.csdn.net/freewebsys
docker非常火,非常方便了,在写程序的使用需要设置好变量。
但是这个对开发测试弄起来就比较麻烦了。
使用junit & srping 就可以了,可以在程序里面写死配置文件。
从而不影响代码结构,不影响系统部署。
相关文章推荐
- 解决Linux修改环境变量后导致登录循环进不去系统的问题
- 【ZYNQ LINUX】使用问题04 ubuntu12 环境变量修改错误,不能进入root 修改的解决办法
- linux中修改环境变量之后导致系统崩溃(用户所有命令不能使用)的解决办法
- weblogic发布应用包,路径乱码错误&linux修改LANG环境变量(解决中文乱码问题)
- 解决使用快捷方式执行的程序需要依赖特定环境变量的问题
- 解决Windows下修改环境变量后需重启才能生效的问题(转)
- linux修改环境变量失误,进不了系统的问题
- 在使用cppunit,搭建测试环境时遇到的问题以及解决办法(仅供参考)
- Ubuntu 12.04 经常弹出"检测到系统程序出现问题"解决方法
- Mysql第一次使用-如何解决Mysql "发生系统错误2,找不到指定的文件" 的问题(第一次安装使用)
- zf2框架的PHP程序,测试环境使用apache,准生产环境使用nginx,出现的问题
- Java环境变量配置&解决版本不一致问题
- Linux 修改系统变量错误大致基础命令不能使用问题修复!
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- 如何解决Mysql "发生系统错误2,找不到指定的文件" 的问题(第一次安装使用)
- 使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
- Python:通过自定义系统级快捷键来控制程序开始或停止记录日志(使用小技巧解决一个貌似无解的问题)
- ubuntu下使用eclipse调试jni无法获取环境变量,本地库(java.library.path,LD_LIBRARY_PATH)等问题的解决。
- 修改系统默认字体(解决英文软件界面使用宋体英文渲染的问题)
- 在使用cppunit,搭建测试环境时遇到的问题以及解决办法(仅供参考)