编写 UserService 的测试用例
下面我们为 UserService 编写一个简单的测试用例类此时的目标是让这个基于 TestContext 测试框架的测试类运行起来我们将在后面逐步完善这个测试用例
清单TestUserServicejava: 基于注解的测试用例
package combaobaotaoservice; import orgsprintextjunit AbstractTransactionalJUnitSpringContextTests; import orgsprintextContextConfiguration; import orgspringframeworkbeansfactoryannotationAutowired; import orgjunitTest; import combaobaotaodomainUser; import javautilDate; @ContextConfiguration //① public class TestUserService extends AbstractTransactionalJUnitSpringContextTests { @Autowired //② private UserService userService; @Test //③ public void handleUserLogin(){ User user = new User(); usersetUserId(); usersetLastIp(); Date now = new Date(); usersetLastVisit(nowgetTime()); userServicehandleUserLogin(user); } }
这里我们让 TestUserService 直接继承于 Spring 所提供的 AbstractTransactionalJUnitSpringContextTests 的抽象测试类稍后本文将对这个抽象测试类进行剖析这里你仅须知道该抽象测试类的作用是让 TestContext 测试框架可以在 JUnit 测试框架基础上运行起来就可以了
在 ① 处标注了一个类级的 @ContextConfiguration 注解这里 Spring 将按 TestContext 契约查找 classpath:/com/baobaotao/service/TestUserServicecontextxml 的 Spring 配置文件并使用该配置文件启动 Spring 容器@ContextConfiguration 注解有以下两个常用的属性:
locations:可以通过该属性手工指定 Spring 配置文件所在的位置可以指定一个或多个 Spring 配置文件如下所示:
@ContextConfiguration(locations={xx/yy/beansxml xx/yy/beansxml})
inheritLocations:是否要继承父测试用例类中的 Spring 配置文件默认为 true如下面的例子:
@ContextConfiguration(locations={basecontextxml}) public class BaseTest { // } @ContextConfiguration(locations={extendedcontextxml}) public class ExtendedTest extends BaseTest { // }
如果 inheritLocations 设置为 false则 ExtendedTest 仅会使用 extendedcontextxml 配置文件否则将使用 basecontextxml 和 extendedcontextxml 这两个配置文件
② 处的 @Autowired 注解让 Spring 容器自动注入 UserService 类型的 Bean而在 ③ 处标注的 @Test 注解则让 handleUserLogin() 方法成为一个 JUnit 标准的测试方法 @Test 是 JUnit 所定义的注解