单元测试
How:
1. 单元测试是测试对象的行为,而不是测试单一方法本身
2. 单元测试是针对单一对象的行为进行测试,所以应该尽可能缩小对外部的依赖范围。例如A.a()方法依赖B,B又依赖C,这时候应该进行使用B的模拟对象进行A.a()的单元测试,而不要使用真实的B(POJO除外)
Why: 单元测试可以保障代码重构安全,使得重构能放心地进行,从而令开发人员有信心改善代码质量
如何模拟JNDI
背景
数据源的JNDI配置在应用服务器上,在单元测试时脱离了容器环境,如何令单元测试顺利执行?
方法
Spring
中提供了类org.springframework.mock.jndi.SimpleNamingContextBuilder
,可以将任意对象注册为JNDI对象,所以可以编写一个父类,先把JNDI对象注册好,子类初始化的时候就可以拿到该JNDI对象了,父类代码如下:12345678910public class AbstractTest { public static void setUpBeforeClass() throws NamingException { ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:testDs.spring.xml"); SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); builder.bind("jdbc/MySQLDS", ctx.getBean("testDs")); builder.activate(); }