当前位置: 首页 > 工具软件 > jMock > 使用案例 >

JMOCK

姚鹤龄
2023-12-01

在web项目中测试servlet比较麻烦,像servletRequest,servletResponse等对象就很难构建(它们都是interface),假如你有一个登录服务,在服务中需要把某些值设入session:

public class UserLoginService { 
    private HttpServletRequest req; 
    private String returnPage; 
    
    public UserLoginService(HttpServletRequest req, String returnPage) { 
        this.req = req; 
        this.returnPage = returnPage; 
    }

    public String login(String id, String pwd) {

       req.getSession().setAttribute("isLogin",true);

}

}

在单元测试中,就需要构建request对象,一种方法就是使用httpClient来创建测试request对象,另外一种就是使用Mock Objects,创建模拟request的对象。模拟对象经常使用的场合包括:

1、很难构建的对象(主要是接口对象)

2、非常消耗资源(资源主要指时间)

JMock就是其中的一种Mock Object Library,比较常用的还有easyMock

下面看一下我的单元测试代码:

public class UserLoginServiceTest extends MockObjectTestCase { 
    
    private DefaultResultStub returnADefaultValue = new DefaultResultStub();  
    
    public void testLogin() { 
        Mock reqMock = new Mock(HttpServletRequest.class); 
        UserLoginService service = new UserLoginService((HttpServletRequest)reqMock.proxy(), "index.jsp"); 
        reqMock.stubs().method("getSession").will(returnADefaultValue); 
        assertEquals("index.jsp", service.login("admin", "*")); 
    } 
}

先创建一个HttpServletRequest的Mock对象,然后调用Mock对象的Proxy方法产生一个HttpServletRequest实例,最后,你需要创建一个getSession方法的Matcher(因为我调用了request对象的getSession方法)。

这只是JMock的一种简单用法,它的功能很强,不但能模拟interface,而且通过CGLIB,还可以测试concrete class。如果你对JMock感兴趣,可以访问它的网站。

-----转自:http://www.cnblogs.com/sunsonbaby/archive/2004/12/14/77193.html

 类似资料: