本文基于mockito-core:2.8.9进行介绍。详细内容可在这里查看具体的文档说明进一步了解。

Mock对象:

// normal
List<String> mockList = Mockito.mock(List.class);
// one-liner mock and stub
List<String> mockList1 = Mockito.when(List.class).get(0)).thenReturn(“mock").getMock();
mock与new的区别在于:
  1. mock返回对象属性为空或者为初始值,具体取决于对象属性类型是原始类型还是包装类型。
  2. 调用mock对象未被stub的方法,默认情况下会根据具体的返回值类型返回null、原始/包装类型值或者空集合。比如:
    1. int/Integer返回0
    2. List/Map返回[]
    3. String/Object返回null

Spy对象:

创建真实对象的spy
// spy对象有无参构造函数
List<String> spyList = Mockito.spy(ArrayList.class);

// spy对象构造函数均带参
// public User(String name){...}
User spyUser = Mockito.spy(new User("spy"));
  1. spy方法返回对象是对该对象进行new操作后的包装对象
  2. spy对象具有和原始对象相同的行为,除非某些方法被stub。

阅读全文......

实际开发场景中,经常会需要将List对象转成Map的情况出现。通常的做法是通过遍历List对象然后进行相应处理。JDK8后开始支持lambda表达式,同时提供针对集合的Stream方法,使得对集合的操作大大简化。下面就备份下如何使用lambda表达式和Guava1实现List到Map的转换。 首先定义测试用的TestBean, 代码如下:
public class TestBean {
	private String name;
	private Integer age;

	public TestBean() {
	}

	public TestBean(String name, Integer age) {
		this.name = name;
		this.age = age;
	}
	// 省略 set/get 方法
	@Override
	public String toString() {
		if (this != null) {
			return "TestBean{" +
					"name='" + name + '\'' +
					", age=" + age +
					'}';
		}
		return "null";
	}
}
测试对象:
List<TestBean> beanList = Lists.newArrayList(
	, new TestBean("jack", 29)
	, new TestBean("Tom", 25)
	, new TestBean("kitty", 25)
	, new TestBean("hurry", 30));

简单的List到Map的转换

阅读全文......

常见代理方式有正向代理、反向代理和透明代理。他们具体如下:

正向代理 forward proxy

C要访问目标机器T,但是无法直接访问,那么通过告诉P,由P去访问T,然后将访问T的结果告诉给C 其中C是客户端,T是目标访问机器,P是代理

关键点

阅读全文......

最近配置spring、mybatis框架时,遇到了无法找到mapper类的问题。最后发现是MapperScannerConfigurerbasePackage配置的问题。 项目mapper类存放目录
com/leeyee/xcode/mapper/*Mapper.java

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Wizard+Forms 向导表单(跨越多个页面的逻辑表单)经常会出现问题。基于无状态的web处理跨多个页面的交互可能是相当棘手的。一个标准的示例是新用户的注册流程。因为用户需要通过被拆分成的多个页面一部分一部的输入信息。同时输入的信息在每一个页面都应被校验,并始终保留在同一个流中,并在结束的时候在一个原子事物中被提交。

Stripes向导

在Stripes中创建一个向导流实际上是非常简单的。简单来说,它涉及编写一个单独的ActionBean去管理页面之间的流,并且通过使用@Wizard注解来标记它。除此之外,还取决于你是否想用单独的事件/方法去处理导航,或者每个事件一个方法。每个页面用不同的事件(方法)会使流的管理变得容易。下面是一个来自Bugzooky的简短示例:

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Use+Defaults+More 这篇文章介绍Stripes中用来减少那些需要在每一个ActionBeans上配置(通常是注解形式)数量的技术。

URL绑定和事件名

从Stripes 1.2开始,Stripes附带了一个名叫NameBasedActionResolver的类,这个类继承子类AnnotatedClassActionResolver. 当URL注解不存在时,NameBasedActionResolver将自动创建默认的URL绑定和事件名。当注解存在时优先使用注解。

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Unit+Testing 这篇文档介绍两种主要的方式用来测试ActionBeans和与之关联的外部容器类,比如Tomcat,Resin或者Jetty。要决定哪种方式适合你,应该大概去了解下两者。这不是用一个方案就可以解决所有问题的,你可能需要在你的项目中同时使用这两种技术。 但是首先,让我们先说明一些事情……
  1. 自动化测试是一件好事情。自动化测试可以让你方便的对代码进行重构,直到写出更高质量的代码。
  2. 我不想通过哲学层面去说明单元测试的好与不好;但良好的可自动运行的测试是值得提倡的,这不关乎他们是否是技术性的单元测试。
  3. 有工具可以让你测试整个包含在常规servelt容器内渲染的JSP的周期;我发现这有一点像是努力工作并当可能的时候去测试我的外部容器1
  4. 对每个Stripes用户,我个人比较推荐使用TestNG。它要比JUnit先进,如果你有做过任何的单元测试,那么TestNG的上手时间也就大概15分钟。

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/State+Management 这篇文档有两个主要部分:
  1. 使用ActionBeanContext进行状态管理
  2. 使用FlashScope进行POST请求后重定向

状态管理

这一节我们将介绍如何在保证类型安全和ActionBean类可测试的情况下,去访问HttpSessionCookies和其他HttpServletRequest/Response行为。关键点就在于提供一个自己ActionBeanContext子类。

ActionBeanContext子类

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Localization 本地化是越来越多的网站必须处理的事情。本地化从来都不是不容易的,但是Stripes尽量让其做起来简单。这篇文档我们将覆盖以下内容:
  • 选择使用的语言环境
  • 选择使用的字符编码
  • 寻找本地化资源
  • 本地化验证
  • 本地化错误信息
    • 在自定义代码中使用本地化错误信息
  • 本地化按钮和标签
  • 传递本地化变量到布局
  • 本地化的其他事情

选择使用的语言环境

构建一个本地化应用可能面临的第一个挑战是针对指定的请求使用哪一个本地化设置。因为有可能你支持的语言和区域不止一个。当用户提交请求,该请求可以包含用户首选语言环境的有序列表。因此你不得不基于支持的语言环境,以及用户首选的语言环境去选择为用户服务的语言环境。

阅读全文......

原文地址:https://stripesframework.atlassian.net/wiki/display/STRIPES/Spring+with+Stripes Stripes是一个web应用框架,它被设计成易于使用并能提升开发人员的开发效率。Spring是一个主要的轻量级组件容器(当然现如今它也包含了其它的一些功能),同样,它也被设计成易于使用并且也能提升开发效率。那么很自然的,你可能想将两者结合起来使用。 集成了Spring的Stripes使得你的ActionBean类可以访问被配置成Spring bean形式的Spring资源。要这么做,只需要将Spring bean注入到ActionBean中即可。为此,你需要完成一些配置,一旦配置完成,就可以在Stripes web应用中使用Spring bean而无需任何其他XML配置。

安装配置Spring

阅读全文......