繁体   English   中英

在Java中模拟Date()而不更改src代码

[英]Mock a Date() in Java without changing the src code

我一直在这里阅读有关使用PowerMock模拟Java中的System Date函数的一些答案,但似乎有必要将注释添加到要测试的实际类中。 让我提出这个问题。 我正在一家大型公司实习,该公司使用Spring,JUnit,Mockito等在系统上进行单元测试。我当前的当前任务是针对一个依赖于数据库的当前时间测试终结点(有点像检查一个数据库)。截止日期)。

我的问题是 :在不接触主要源代码的情况下在测试类中模拟系统日期是否可能或直观? 我不想修改源代码; 即使它处于测试环境中,我也希望保持不变。 还是只修改数据库条目以更改日期,执行我的测试然后使用事务性测试回滚更有意义? 谢谢一群!

我要模拟的类是: java.util.Date cDate = new java.util.Date();

我知道这不是一个简单的解决方案,但是您可以使用byteman( https://community.jboss.org/wiki/ABytemanTutorial )将日期提前到系统属性中。 将其复制到名为addDaysToJvmDate.btm的文件中:

RULE Calling java.util.Date()
CLASS java.util.Date
METHOD <init>()
AT EXIT
IF TRUE
DO $0.fastTime = java.lang.System.currentTimeMillis() + (86400000 *    java.lang.Long.parseLong(java.lang.System.getProperty("addDays")));
ENDRULE

并使用以下命令启动JVM:

java - javaagent:${BYTEMAN_HOME}/lib/byteman.jar=script:addDaysToJvmDate.btm,boot:${BYTEMAN_HOME}/lib/byteman.jar -cp yourclasspath yourapp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM