我谈Web程序难测试

作者: 夜未眠    来源: 夜未眠的博客

 

  以我用PHP的感觉来看,Web程序还是难以实施测试的。这里所说的“测试”主要是指自动化的单元测试。通常这类测试都依赖于某种测试框架,如 Java的JUnit测试框架。而Web程序的测试经常会涉及到Web服务器、浏览器等等外部的条件,自动化的单元测试实施起来并不容易。

  时间一长,就开始思考根本原因。我认为Web程序的测试难以进行就在于HTTP是无状态的通信协议,而在几乎所有的Web应用程序中,又都需要记录用户的状态。因此有了Cookie和Session这些东西,而这些东西严重依赖于浏览器和服务器。再者,测试归根结底是把程序的输出结果跟预期结果相比较,但Web程序的输出是什么呢?通常的理解是浏览器里显示的Web页面,但Web页面内容在语义上并不十分严格,通过简单检验输出来进行测试既不切实际,也无必要。

  退一步说,对于MVC结构的Web程序来讲,实质性的代码有一部分在Model层中。这个Model层应该是和浏览器、服务器环境没有耦合的,这样才能够比较方便地进行自动测试。但在Controller部分中通常也会包含重要的流程,而Controller通常都需要Web服务器的配合。

  在Java的技术中,“解耦”往往表现得淋漓尽致。Struts 1把程序分成了明显的M、V、C三部分,但Controller还不得不依赖一些Servlet的API,如HttpServletRequest;到了 Struts 2,不仅不需要Servlet的API,甚至连Struts本身的API都不必依赖。由框架本身统领起整个应用程序,而实际的功能则由类似于挂接在整个机器上的一些小部件来实现,这些小部件并不去使用整个机器的功能,而是由机器统一驱动这些零件来工作。我想这应该就是人们常说的“控制反转(IoC)”吧。

  如果能很好地解耦,才能更顺利地实施测试。只要测试的成本变得非常低,低到运行整个测试只需要按一两个键的时候,测试才能真正起到作用。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值