我想向一些没有或几乎没有单元测试经验的同事介绍单元测试.我将首先介绍大约一个小时来解释这个概念并提供大量示例.我将跟进结对编程会话和代码审查.
在引导中应该关注哪些关键点?
要记住的另一件事是单元测试测试小东西,"单位".因此,如果您的测试针对的是像实时服务器或数据库这样的资源,那么大多数人都称之为系统或集成测试.要单独测试与这样的资源对话的代码,人们经常使用模拟对象(通常称为模拟).
当单元测试测试小东西时,测试运行得很快.这是好事.经常运行的单元测试可以帮助您在发生后立即发现问题.经常运行的单元测试的最终目的是让它们自动化,作为持续集成的一部分.
人们对是否需要100%单元测试覆盖率有不同的看法.我相信高覆盖率是好的,但是有一个收益递减点.作为一个非常粗略的经验法则,我会对代码库感到满意,该代码库具有85%的覆盖率和良好的单元测试.
与单元测试一样重要的是,其他类型的测试(如集成测试,验收测试等)也可以被视为经过良好测试的系统的一部分.
如果您希望将单元测试添加到现有代码中,您可能需要查看Michael Feathers的"有效使用遗留代码".未考虑测试而设计的代码可能具有使测试变得困难的特性,而Feathers则撰写了关于仔细重构代码以使其更易于测试的方法.当您熟悉使测试代码变得困难的某些模式时,您和您的团队可以编写试图避免/最小化这些模式的代码.