以下内容来自《Microsoft .NET企业级应用架构设计》
Bruce Eckel曾提出一句流行的口号,表明软件测试的重要性:
若软件没有经过测试,那么可定无法完成工作。
测试会位于不同的层次上,比如用单元测试来判断软件的各个独立单元是否符合功能性需求,用集成测试来判断软件能否适应运行环境和基础设施,以及多个组件能否正常协同工作。最后,验收测试用来判断完成的系统是否符合客户的需求。
单元测试和集成测试属于开发团队的工作,进而让团队对软件质量产生信心,测试结果会说明团队的开发状态是否朝着良好的方向发展。通常而言这些测试不会覆盖整个代码,代码的覆盖程度和代码的质量一般也没有清晰的关系。
而客户通常对但单元测试和集成测试的结果并不在意,他们所关心的仅仅只是验收测试而已。验收测试着眼于完成的系统,属于客户和开发团队合同的一部分。验收测试可以由客户书写,也可以由负责项目的团队和客户协助完成。在验收测试中你会发现如下的核对清单:
1. 使用如下数据(....)插入一个客户
2. 使用现有的ID修改该用户
3. 观察系统反应,得到期望的结果
另一个验收测试结果如下:
1. 在批处理过程中,关闭应用程序服务器的某个节点
2. 观察系统反应以及事务的结果
若验收测试顺利通过,那么项目也就宣告结束,产品也宣告成功。
单元测试实战
我们推荐用一个专门的程序集包含测试代码。此外,对每个类库都要提供测试。最好的实践是对程序集中每个xxx类,都有一个对应的xxxTestCase类用来测试。
我们可以使用伪对象(Fake)消除依赖
例子:
public class FakeLogger: ILogger
{
Public void Log(string message)
{
Return;
}
}
软件可以正常工作的概率与它所需的代码行数成反比。
Bug出现的几率与正在查看该软件地人数及这些人的重要程度成正比。
任何人都可以写出计算机能够理解的代码,而只有优秀的程序员才能写出别人可以理解的代码。 --Martin Fowler
想了解更多关于.NET架构的知识,请参考《Microsoft .NET企业级应用架构设计》