对测试的认识

发表于:2013-7-15 11:02

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:OnlyQi    来源:51Testing软件测试网采编

  2,对于一般项目,到达到100%的覆盖率基本不可能。

  尽管我们现在有各种测试框架,各种mock框架,但在很多可能的情况下都会遇到难于,甚至无法测试的代码。

  例如private方法,唯一测试的方式就是利用反射机制。

  如果测试覆盖率变成了一个目标,而不是提高代码质量,防范bug的手段,那就是本末倒置了。

  但是,如果为了方便测试而修改源代码,并不是不可理喻的行为。如果你发现代码难于测试,则有可能是代码存在一些问题。

  例如,在另一篇关于Mockito的文章中提到了,为了将mock对象传递到被测试的对象中,需要源代码提供get/set方法,否则测试起来就很麻烦。

  在实践中我们会慢慢发现,代码不够独立,缺乏应有的get/set方法,结构不合理,方法应该被重构等等问题,会导致难于被测试。

  因此UT也是对源代码的一次review。一个有责任心的程序员,应该从UT中看到更多。永远记住一条:我们不是在为了测试而测试,我们应该思考的更多。

  3, 对于每一个测试方法来说,所谓的独立到底是什么?

  最近遇到了关于UT的这样一个问题:每一个测试方法到底要多么“独立”?

  例如,在一个被测试类中有两个方法:

public class app{
public void method1(){
String testString = method2(); //在方法一中调用了方法二。
}
public String method2(){
}
}

  于是问题是,当我们写第一个方法method1的测试方法method1Test时,我们应该mock的是什么?我们应该mock方法二?还是不需要mock?

  也就是说,当我们测试方法一时,应该把方法二看做外部的东西,通过mock方法二,仅仅测试方法一。

  或是不使用mock,直接调用方法一(实际同时也调用了方法二)。因此相当于同时测试了方法一和方法二的行为。

  我本来是倾向于第一个做法,将方法一作为完全独立的被测试的部分,通过mock方法二,让方法一在被测试时,和其他类或方法完全没有关联。

  但是和同事讨论以后,看法发生了变化。看起来第二种做法,同时测试了方法一和二。但是在一个类中,各个方法本来就不是完全独立的。

  因此有成员变量的存在。成员变量的值天生的就可以在各个方法中传递。

  因此结论是:UT的独立范围,永远是一个类。测试时,当调用了其他类的代码时,就应该使用mock将被测试类和其他类隔离开。

  测试时,如果调用了同一个类的其他方法时,是不需要使用mock的。因为调用的是同一个类中的代码。

  集成测试 Integration Test

  集成测试的定义:

  An integration test is done to demonstrate that different pieces of the system work together. Integration tests cover whole applications, and they require much more effort to put together. They usually require resources like database instances and hardware to be allocated for them. The integration tests do a more convincing job of demonstrating the system works (especially to non-programmers) than a set of unit tests can, at least to the extent the integration test environment resembles production.

  因此,

  1,通常会在指定的环境运行集成测试。

  2,集成测试的目的旨在测试各个组件间是否能互相配合,正常工作。和UT一样,集成测试也是为了看代码是否按"设计或期望的方式"工作。

  3,集成测试的范围比较宽泛:范围可以小到,如果在一个UT case中涉及了多个类,就可以认为这是集成测试。大到整个系统,从后台到前端所有组件。Integration tests can be performed at the unit level or the system level.

  集成测试往往会涉及外部组件,如数据库,硬件,网络等等。

  4,集成测试通常应由专门的测试人员完成。

  HP's (mercury) QTP or Borland's Silktest 都可以做自动化的集成测试和回归测试。

  在敏捷开发的今天,一个概念变得更重要了:CI (Continuous Integration)

  本文并不打算探讨CI,因为这又是一个很大的话题。CI 和集成测试经常结合的很紧密。

  CC(CruiseContoller), 是现在常用的CI工具之一。

  Hudson 是另一个较新的CI工具。http://hudson-ci.org/

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号