ssh2单元测试和集成测试

单元测试
用来检验目标代码中很小的一部分。通常一个单元测试用于判断某个特定条件或者特定场景下的某个特定函数的行为。如果对某个功能模块进行单元测试时,我们希望屏蔽对外在功能模块的屏蔽,以便将焦点放在目标模块的测试上,可以使用虚拟对象模拟外在模块的行为。这样单元测试可以假想在外在模块正确的情况下本模块的逻辑的正确性了。单元测试下不应该依赖于spring容器,通过模拟对象完成单元测试。
如下是对Action的单元测试

UserAction

@ParentPackage("default")
@Namespace("/user")
public class UserAction extends ActionSupport{
@Autowired
private IUserService userService;

private User user;
@Action(value = "test", results = {@Result(name = "success", location = "/index.jsp")})
public String test() {
try{
userService.save(user);
return SUCCESS;
}catch(Exception e){
e.printStackTrace();
return "error";
}

}

@Action(value = "test2", results = {@Result(name = "success", location = "/index.jsp")})
public String test2() {
try{
User user=userService.findUser(getUser().getId());
if(user.getName().equals("xxx"))
return SUCCESS;
else
throw new Exception();
}catch(Exception e){
e.printStackTrace();
return "error";
}

}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

public IUserService getUserService() {
return userService;
}

public void setUserService(IUserService userService) {
this.userService = userService;
}

}


UserService

public class UserService implements IUserService{
@Autowired
private UserDao userDao;
@Transactional(rollbackFor=Exception.class)
public void save(User userObject)throws Exception {
try{
userDao.save(userObject);
if(userObject.getName().equals("admin"))
throw new Exception("fuck");
}catch(Exception e){
throw e;
}
}

public User findUser(long id){
return userDao.findById(id);
}
}



YhActionTest

public class YhActionTest extends AbstractModelAndViewTests {

public void testYhlist(){

MockHttpServletRequest request=new MockHttpServletRequest();
MockHttpSession session=new MockHttpSession();
request.setSession(session);
UserAction mAction=new UserAction();
IUserService yhService= EasyMock.createMock(IUserService.class);
mAction.setUserService(yhService);

User yh=new User();
yh.setId(100);
yh.setName("xxx");
yh.setPassword("xxxx");
EasyMock.expect(yhService.findUser(yh.getId())).andReturn(yh);
EasyMock.replay(yhService);
mAction.setUser(yh);
String r=mAction.test2();
assertEquals(r, "success");

EasyMock.verify(yhService);

}

}


MockHttpServletRequest ,MockHttpSession 是虚拟的request,session,因为不是web环境中,所以需要虚拟这两个对象,(本测试没用到)。IUserService yhService= EasyMock.createMock(IUserService.class);是虚拟一个服务类实例。


集成测试
集成测试是在功能完成后,验证模块之间匹配调用的正确性而进行的测试。一般对业务层和web层进行集成测试。集成测试应该是事先装配好模块和模块之间的关联。因此需要spring配置文件的作用,启动spring容器。

建立测试目录
test/action test/service
将applicationContext.xml和dataSource.properties放到test根目录下面。另struts.xml需要在src根目录下。因为不是启动web容器,所以,不会将web-inf中的applicationContext.xml和dataSource.properties加载进classes路径中。所以需要放到test下面。

test/action/UserActionTest
测试action+service+dao


public class UserActionTest extends StrutsSpringTestCase{
private UserAction mAction;
private ActionProxy proxy;

@Override
public String[] getContextLocations() {
return new String[]{"classpath:applicationContext.xml"};
}

public void testLogin() throws Exception {
User user=new User();
user.setName("yuyong");
user.setPassword("890806");
proxy = getActionProxy("/user/test");
mAction = (UserAction) proxy.getAction();
mAction.setUser(user);
assertEquals("success",mAction.test());
user.setName("admin");
mAction.setUser(user);
assertEquals("error",mAction.test());
}

}



test/action/AbstractSpringContextTests1
测试service+dao


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
@TransactionConfiguration(defaultRollback=true)
@Transactional
public class AbstractSpringContextTests1{
@Resource
private IUserService yhService;

@Test
public void save() throws Exception {
User user=new User();
user.setName("admin");
user.setPassword("134");
yhService.save(user);
}
}


鄙人才疏学浅,如有不对,望各位前辈细心指出。谢谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值