Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1187133
  • 博文数量: 89
  • 博客积分: 10546
  • 博客等级: 上将
  • 技术积分: 1510
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-16 01:24
文章分类

全部博文(89)

文章存档

2012年(7)

2011年(4)

2010年(5)

2009年(52)

2008年(21)

分类: Java

2009-03-31 22:47:04

过去工作中,我常常听一些共事的人讲这样的话,“我的程序不可能有问题”,但结果恰恰总是事与愿违,这些人的自大往往导致了程序无法运行。事实证明,人无完人,人的思维不可能是尽善尽美的。对于我来讲,与不写的测试的人共事,是件相当头痛的事。测试能够有效提高软件的质量,将bug数量降低到最低。对于程序员,首先要做的是单元测试。

Pragmatic Programmer, The: From Journeyman to Master一书中 Tip 27为“Don't Assume It—Prove It”,道出了测试的真谛。

使用 TestNG 进行测试

以 helloworld 为例,测试 HelloActionBean。

		
public class HelloActionBeanTest {

@Test
public void sayHello(){
HelloActionBean hello=new HelloActionBean();
hello.setContext(new ActionBeanContext());
hello.setMessage("Stripes!");
hello.sayHello();
Assert.assertEquals("Hello,Stripes!", hello.getMessage());

}

}

因为 ActionBean 是一个POJO 类,测试内部逻辑并不困难,因为它不依赖容器类,如 HttpServletRequest,Session,Cookie等。如果要测试这种类相关的逻辑,单纯依靠 TestNG 可能比较难实现。但是,Stripes 提供一套测试 提供了 testng for eclipse。NetBeans 的nightly build 也支持 TestNG ,参见。

使用 Stripes 测试 API

net.sourceforge.stripes.mock 包中提供多个 Mock类。其中包括 MockHttpServletRequest,MockSession等。有了这些类,你可以脱离容器的情况下,模拟 servlet 容器环境。

public class HelloIntegratedTest {

MockServletContext context;

@BeforeTest
public void setupNonTrivialObjects() {
context = new MockServletContext("testing");

// Add the Stripes Filter
Map filterParams = new HashMap();
filterParams.put("ActionResolver.Packages", "tutorial.action");
context.addFilter(StripesFilter.class, "StripesFilter", filterParams);


// Add the Stripes Dispatcher
context.setServlet(DispatcherServlet.class, "StripesDispatcher", null);
}

@Test
public void sayHelloTest() throws Exception {
// Setup the servlet engine
MockRoundtrip trip = new MockRoundtrip(context, HelloActionBean.class);
trip.setParameter("message", "Stripes!");
trip.execute("sayHello");

HelloActionBean bean = trip.getActionBean(HelloActionBean.class);
Assert.assertEquals("Hello,Stripes!", bean.getMessage());
Assert.assertEquals(trip.getDestination(), "/greeting.jsp");
}
}

阅读(1956) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~