译释Dozen ways to find bugs(8)——Expand your toolbox
Posted on 2009-03-02 21:15 Aaron Wu 阅读(309) 评论(2) 编辑 收藏 举报英文原文名叫《A Dozen Ways to Get the Testing Bug in the New Year》,是Aaron在java.net上发现的文章。原文地址http://today.java.net/pub/a/today/2004/01/22/DozenWays.html,原文是在2004年1月22日发表的,按常理说一片早已经过了时效期的文章是没有多大用处的,但是Aaron却认为时至今日该文依然值得一阅。
很多时候,直到我们要测试某个东西的时候才发现手头上并没有合适的工具。由于缺乏合适的工具,我们需要花费额外的时间在测试上,而当项目周期是固定的时候,相应的测试时间的压缩导致了测试范围/测试质量的缩水。开源世界现在为我们提供了很多开源的测试工具,我们可以不费吹灰之力就找到一个测试工具或组件。
HttpServletRequest
实例,而它的创建又是一件很麻烦的事情。如果我们还需要在运行测试之前将某个J2EE服务器准备好到某种规定的状态,事情就变得更加复杂了,而且这样的测试不能很频繁地运行。这个时侯我们就需要添加
Mock Objects框架到我们的工具箱之中了。接下来的一个JUnit示例就是通过使用Mock Objects框架在J2EE服务器之外来帮助测试这个Serlvet:
import junit.framework.TestCase;
import com.mockobjects.servlet.*;
public class ShoppingServletTest extends TestCase {
ShoppingServlet servlet = new ShoppingServlet();
MockHttpServletRequest request = new MockHttpServletRequest();
request.setupAddParameter("item", "Snowboard");
request.setupAddParameter("quantity", "1");
ShoppingCart cart = new ShoppingCart();
servlet.addRequestedItem(request, cart);
assertEquals(1, cart.itemCount());
}
}
读者可以看到,我们在请求中使用了一个MockHttpServletRequest
的实例,这个实例会被传递给Serlvet的addRequestedItem()方法。当运行测试时候,我们的Serlvet会“误认为”自己运行在一个Servlet容器中。在稍后的集成测试中,我们会涉及到更多的测试范围,这个时候我们可能会用到一个真实的servlet运行环境,但是至少在目前我们刚开始写Servlet代码的时候,使用Mock Objects可以帮助我们运行一个更快而且无害的测试。
因此,当你准备重头开始自己写一个测试组件或者因为测试的工作量太大而放弃(部分)测试之前,你最好调查一下当前是否有合适的工具可以帮助我们解决这些问题。JUnit是一个框架而不是一个应用程序,因此当你发现JUnit自己包含的一些常用的断言(Assertoin)不够用的时候,我们还可以自己写一些自定义的断言。实际上,我们也可以写一些给予JUnit的应用程序(测试工具)。
JUnit.org列出了当前已有的一些JUnit应用程序和插件。实际上,类似与JUnit,我们还可以在XProgramming.com上找到应用于其他语言的XUnit测试框架。如果这上面没有你想要的东西,你还可以到google上面搜索,你会找到更多的工具。当然,你也可以自己写一个测试组件,并且在网络上共享它,以帮助其他人扩展自己的工具箱。