- 浏览: 2473120 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
通过下面的例子了解Guava Supplier的用法.在做单元测试的时候, 我们可能需要Mock掉一些对外部资源的依赖. 比如时间, 随机数, 系统文件访问.
下面是将要测试的代码, 将当前时间输出:
但是这里有一个问题, 就是代码中是直接new的一个DateTime对象, 所以造成了对系统时间的直接依赖. 导致我们对输出时间的测试比较困难, 因此这里我们要借助Guava Supplier.
Supplier只有一个方法: get(), 返回suppiler构建的对象. 比如下面的例子:
通过上面的代码你将不再关心firstName是什么, 只需要调用get方法即可.
对目标代码进行重构
实现一个DateTime Supplier. 同时提供一个接口, 方便测试:
下面是具体实现
然后注入DateTimeSupplier:
创建一个MockDateTimeSupplier用来做测试:
最后是测试代码:
总体感觉代码还是比较多的, 又是接口又是实现的. 而目标就是为了对系统时间进行mock, 不过提供了一种单元测试的思路.
原文: http://java.dzone.com/articles/mocking-jodatimes-datetime-and
下面是将要测试的代码, 将当前时间输出:
@Controller @RequestMapping(value = "/time") @VisibleForTesting class TimeController { @RequestMapping(value = "/current", method = RequestMethod.GET) @ResponseBody public String showCurrentTime() { // BAD!!! Can't test DateTime dateTime = new DateTime(); return DateTimeFormat.forPattern("hh:mm").print(dateTime); } }
但是这里有一个问题, 就是代码中是直接new的一个DateTime对象, 所以造成了对系统时间的直接依赖. 导致我们对输出时间的测试比较困难, 因此这里我们要借助Guava Supplier.
Supplier只有一个方法: get(), 返回suppiler构建的对象. 比如下面的例子:
public class FirstNameSupplier implements Supplier<String> { private String value; private static final String DEFAULT_NAME = "GUEST"; public FirstNameSupplier() { // Just believe that this goes and gets a User from somewhere String firstName = UserUtilities.getUser().getFirstName(); // more Guava if(isNullOrEmpty(firstName)) { value = DEFAULT_NAME; } else { value = firstName; } } @Override public String get() { return value; } }
通过上面的代码你将不再关心firstName是什么, 只需要调用get方法即可.
对目标代码进行重构
实现一个DateTime Supplier. 同时提供一个接口, 方便测试:
public interface DateTimeSupplier extends Supplier<DateTime> { DateTime get(); }
下面是具体实现
public class DateTimeUTCSupplier implements DateTimeSupplier { @Override public DateTime get() { return new DateTime(DateTimeZone.UTC); } }
然后注入DateTimeSupplier:
@Controller @RequestMapping(value = "/time") @VisibleForTesting class TimeController { @Autowired @VisibleForTesting // Injected DateTimeSupplier DateTimeSupplier dateTime; @RequestMapping(value = "/current", method = RequestMethod.GET) @ResponseBody public String showCurrentTime() { return DateTimeFormat.forPattern("hh:mm").print(dateTime.get()); } }
创建一个MockDateTimeSupplier用来做测试:
public class MockDateTimeSupplier implements DateTimeSupplier { private final DateTime mockedDateTime; public MockDateTimeSupplier(DateTime mockedDateTime) { this.mockedDateTime = mockedDateTime; } @Override public DateTime get() { return mockedDateTime; } }
最后是测试代码:
public class TimeControllerTest { private final int HOUR_OF_DAY = 12; private final int MINUTE_OF_DAY = 30; @Test public void testShowCurrentTime() throws Exception { TimeController controller = new TimeController(); // Create the mock DateTimeSupplier with our known DateTime controller.dateTime = new MockDateTimeSupplier(new DateTime(2012, 1, 1, HOUR_OF_DAY, MINUTE_OF_DAY, 0, 0)); // Call our method String dateTimeString = controller.showCurrentTime(); // Using hamcrest for easier to read assertions and condition matchers assertThat(dateTimeString, is(String.format("%d:%d", HOUR_OF_DAY, MINUTE_OF_DAY))); } }
总体感觉代码还是比较多的, 又是接口又是实现的. 而目标就是为了对系统时间进行mock, 不过提供了一种单元测试的思路.
原文: http://java.dzone.com/articles/mocking-jodatimes-datetime-and
发表评论
-
Effective Unit Test:代码面前并非人人平等
2012-02-05 15:38 1708这里的观点非常值得探讨, 所有的产品代码就像是一项投资, 有些 ... -
Google Guava EventBus简化生产/消费者模式使用
2012-02-05 14:34 17780在Google Guava 10版本引入了EventBus, ... -
对多线程进行测试
2011-07-02 15:31 1417在junit下, 很难对多线程的代码进行测试, 因此需要借助其 ... -
Google Guava 库用法整理
2010-08-13 21:43 83902参考: http://codemunchies.com/200 ... -
补习一下EasyMock
2010-04-28 09:18 5051最近有时间, 再温习一下easymock相关的东东 http ... -
结合使用Dummy, InjectTo, PartialMock的单元测试
2009-12-24 21:21 1484结合使用Dummy, InjectTo, PartialMoc ... -
使用代码方式运行指定单元测试类及方法
2009-12-17 08:57 1775记一下, 备忘 private void runT ... -
JunitCore
2009-12-15 01:03 0JUnitCore core = new JUnitCore( ... -
修改dbunit的几个bug兼对dbunit进行扩展
2009-12-08 20:51 3198最近在对unitils进行扩展, 主要是数据库这块儿的内容, ... -
让Unitils实现excel下的多数据源支持
2009-12-03 21:02 3955说明:这里的多数据源需要利用spring中配置的多个DataS ... -
unitils中spring module初始化源码解读
2009-12-03 20:32 2659spring module的初始化还算简单, 但是熟悉里面的原 ... -
解决unitils中的dbunit使用spring中定义的多数据源
2009-12-02 20:07 3178最近在研究unitils, dbunit来适应目前的单元测试. ... -
Unitils 学习笔记
2009-11-27 19:44 7796源码部分 EasyMock相关的 有三个注解: Mock ... -
使用classloader自定义测试套件TestSuite
2009-10-21 19:04 2349junit自带了一个suite用来将多个test case放在 ... -
《单元测试之道Java版——使用JUnit》读书笔记
2009-06-09 23:06 3424这个可能是到目前为止 ... -
JunitRunner定制之模仿@Before对属性进行初始化
2009-02-12 21:54 2549在测试的过程中, 会用到一些模拟数据, 希望在每次调用测试方法 ... -
打造自己的单元测试容器——Junit Runner扩展举例
2009-02-05 23:40 6224最近对java的annotation和junit的Runner ... -
junit4源码浅析
2009-02-05 21:12 7354junit3和junit4是两个非常不同的版本, 不能简单的理 ... -
最近单元测试中写的一个Assert
2009-01-15 22:03 2922该类提供的assert方法主要针对数据库的单元测试中, 使用S ... -
用于生成mock模型对象Setter代码工具类
2009-01-12 10:35 1804最近写的一个工具类, 用来生成mock的javabean对象, ...
相关推荐
Guava的缓存是线程安全的,无需额外的同步措施即可在多线程环境中使用。 综上所述,Google Guava的定时缓存功能使得我们能够轻松地在Java应用中实现高效的缓存机制,有效减少计算和网络请求的负担,提升整体性能。...
Guava脱敏是指使用Google Guava库进行敏感数据的脱敏处理。脱敏是一种保护个人隐私和数据安全的技术,通过对敏感数据进行处理,将其转换为不敏感或匿名数据,以防止数据泄露和滥用。 在Guava中,脱敏通常涉及对字符...
guava 使用方法 教程
`guava-18.0.jar`是Guava库的编译后的二进制版本,包含了所有Guava类和方法的字节码,开发者可以直接在项目中引用这个JAR文件来使用Guava的功能。Guava 18.0版本包含了大量实用工具,例如: 1. **集合框架扩展**:...
在使用Guava时,需要将guava.jar添加到项目的类路径中,以便能够使用其中的类和方法。如果使用的是Maven或Gradle,可以通过添加对应的依赖来引入Guava库。 总的来说,Guava是一个非常强大的Java库,它提供了大量...
### Guava概述 Guava是Google推出的一款Java核心类库,旨在通过添加一系列经过充分测试且高度实用的工具集来优化Java...对于任何希望提高开发效率和代码质量的Java开发者来说,Guava都是一个值得深入学习和使用的库。
在Java开发中,Guava库被广泛使用,因为它包含了大量的集合框架、并发支持、缓存机制、字符串处理、I/O操作等多个方面的功能。 标题中的"guava-19.0.jar"是Guava库的19.0版本的二进制文件,包含了编译后的Java类,...
赠送jar包:guava-23.0.jar; 赠送原API文档:guava-23.0-javadoc.jar; 赠送源代码:guava-23.0-sources.jar; 赠送Maven依赖信息文件:guava-23.0.pom; 包含翻译后的API文档:guava-23.0-javadoc-API文档-中文...
1. **guava-21.0-rc2**: 这是Guava库的二进制发行版,包含了编译好的Java类库,可以直接在项目中引用使用。21.0-rc2表示这是一个候选版本,Release Candidate,意味着这是发布前的最后一个测试版本,通常在正式发布...
赠送jar包:guava-20.0.jar; 赠送原API文档:guava-20.0-javadoc.jar; 赠送源代码:guava-20.0-sources.jar; 赠送Maven依赖信息文件:guava-20.0.pom; 包含翻译后的API文档:guava-20.0-javadoc-API文档-中文...
赠送jar包:guava-17.0.jar; 赠送原API文档:guava-17.0-javadoc.jar; 赠送源代码:guava-17.0-sources.jar; 赠送Maven依赖信息文件:guava-17.0.pom; 包含翻译后的API文档:guava-17.0-javadoc-API文档-中文...
赠送jar包:guava-18.0.jar; 赠送原API文档:guava-18.0-javadoc.jar; 赠送源代码:guava-18.0-sources.jar; 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:...
本文将深入探讨两个常用的重试框架:Spring Retry和Guava Retry,并通过一个名为`retry-starter`的Spring Boot项目实例,来解析它们的使用方式以及差异。 首先,我们来看Spring Retry。Spring Retry是Spring框架的...
本案例代码将详细介绍Guava Cache的使用,包括缓存的创建、删除、获取、失效监听、加载以及淘汰策略。 1. **缓存创建**: Guava Cache可以通过CacheBuilder类创建。CacheBuilder提供了丰富的配置选项,如最大容量...
Guava是Google开发的一个核心库,它为Java开发人员...通过这个压缩包,开发者不仅可以直接在项目中使用Guava,还可以深入研究其源代码,学习Google的编程理念,以及查阅详细的API文档,确保正确、高效地使用Guava库。
Guava 是一个由 Google 开发并维护的 Java 库,它提供了许多实用工具类和集合框架的增强功能,极大地丰富了 Java 平台的标准库...此外,了解并掌握 Guava 的使用,能够使你的代码更加简洁、高效,同时减少潜在的错误。
赠送jar包:guava-11.0.2.jar; 赠送原API文档:guava-11.0.2-javadoc.jar; 赠送源代码:guava-11.0.2-sources.jar; 赠送Maven依赖信息文件:guava-11.0.2.pom; 包含翻译后的API文档:guava-11.0.2-javadoc-API...
guava
Guava是Google开发的一个Java库,它包含许多Google核心库使用的功能,如集合、缓存、并发库、原生类型支持、字符串处理、I/O等。这个压缩包包含的是Guava的不同版本,分别是guava-2.6.2.jar、guava-18.0.jar、guava-...