Asp.net 将单元测试慢慢集成到项目中的步骤

Asp.net 将单元测试慢慢集成到项目中的步骤,asp.net,vb.net,unit-testing,stored-procedures,n-tier-architecture,Asp.net,Vb.net,Unit Testing,Stored Procedures,N Tier Architecture,我目前正在与另一名合作学生合作学习一个即将完成的项目。由于这个项目是从一个合作社传到另一个合作社的,所以在这一过程中一直采取不良做法,测试一直留到最后。我决定编写单元测试,以便在测试时学习新的东西 然而,我正在开发一个3层、紧密耦合的应用程序,它似乎不可能以当前的形式进行单元测试。我不想通过一夜之间对代码进行无法识别的重构,从而甩掉另一个对这些概念一无所知的合作学生。那么,我应该采取什么步骤慢慢地将代码推向单元可测试性呢?我是否应该首先实施工厂模式,让其他学生在前进之前熟悉工厂模式 我道歉,如果

我目前正在与另一名合作学生合作学习一个即将完成的项目。由于这个项目是从一个合作社传到另一个合作社的,所以在这一过程中一直采取不良做法,测试一直留到最后。我决定编写单元测试,以便在测试时学习新的东西

然而,我正在开发一个3层、紧密耦合的应用程序,它似乎不可能以当前的形式进行单元测试。我不想通过一夜之间对代码进行无法识别的重构,从而甩掉另一个对这些概念一无所知的合作学生。那么,我应该采取什么步骤慢慢地将代码推向单元可测试性呢?我是否应该首先实施工厂模式,让其他学生在前进之前熟悉工厂模式


我道歉,如果我的知识有缺陷,不应该有任何问题。我不熟悉这一点:)

在项目中途开始新的开发实践是非常困难的。在过去,当我从事从一开始就没有经过单元测试的项目时,一个好的方法是制定“新代码必须有单元测试”的规则,但不要对为旧代码编写的单元测试施加压力

当然,当项目的结构不适合测试性时,即使这样也很困难

我最好的建议是分步进行

首先创建单元测试程序集(或项目或任何东西),其中没有测试。然后找到一小块定义和分离得相当好的代码区域,并为该区域编写一些单元测试。让你的同事也来看看,开始做一些“最佳实践”,比如每次签入任何代码时都要运行单元测试(如果可能的话,会自动进行)

一旦你有了工作,你可以慢慢地开始添加更多

钥匙慢慢地打开了。正如我所说的,从一开始就可以让旧代码免于测试。一旦您的团队掌握了单元测试的概念,并且在编写单元测试方面变得更好,您就可以稍后再讨论它。

michaelfeathers


很难知道实现工厂模式是否有好处,这取决于代码在做什么:)

围绕代码中的主要功能编写一系列黑盒测试如何?因为您提到它是一个ASP.NET项目,所以可以使用诸如或之类的框架来自动化web浏览器。这为您提供了一组基线功能,无论代码有多大的变化,这些功能都应该保持不变

一旦您对项目的高级功能进行了大量测试,我就会开始深入研究代码,正如Simon p.Stevens所提到的,慢慢来。获取的(免费!)副本,这样您就能够自动执行一些基本的重构,例如提取方法。只需将较大的代码块拆分为更小、更可测试的代码块,就可以在不改变任何功能的情况下大幅提高可测试性。

作者Michael Feathers(如果您有订阅,也可在Safari中获得)是执行任务的优秀资源。作者将遗留代码定义为没有单元测试的代码,并给出了大量必要的保守技术的实际演练,因为您在工作时没有安全网来测试代码。目录:

  • 第一部分:变化的机制
    • 第一章。更改软件
      • 更换软件的四个原因
      • 危险的变化
    • 第二章。处理反馈
      • 什么是单元测试
      • 高级测试
      • 试验覆盖物
      • 遗留代码更改算法
    • 第三章。传感与分离
      • 伪造合作者
    • 第四章。煤层模型
      • 一大页文字
      • 接缝
      • 接缝类型
    • 第五章。工具
      • 自动重构工具
      • 模拟对象
      • 单元测试线束
      • 通用测试线束
  • 第二部分:更换软件
    • 第六章。我没有太多的时间,我必须改变它
      • 萌芽法
      • 萌芽班
      • 包裹法
      • 包装类
      • 总结
    • 第七章。改变需要永远的时间
      • 理解力
      • 滞后时间
      • 打破依赖关系
      • 总结
    • 第八章。如何添加功能?
      • 测试驱动开发(TDD)
      • 差分编程
      • 总结
    • 第九章。我不能让这门课成为一个测试工具
      • 刺激性参数的情况
      • 隐藏依赖项的情况
      • 建筑集团的案例
      • 令人恼火的全球依赖
      • 可怕的情况包括依赖关系
      • 洋葱参数的情况
      • 别名参数的情况
    • 第十章。我无法在测试线束中运行此方法
      • 隐藏方法的案例
      • “有用”语言特征的案例
      • 无法检测到的副作用
    • 第十一章。我需要改变一下。我应该测试什么方法?
      • 关于效果的推理
      • 推理
      • 效应传播
      • 效果推理工具
      • 从效果分析中学习
      • 简化效果草图
    • 第十二章。我需要在一个领域做很多改变。我必须打破所有相关类的依赖关系吗?
      • 拦截点
      • 用夹点判断设计
      • 夹点陷阱
    • 第十三章。我需要做出改变,但我不知道该写什么测试 特性测试
      • 特征类
      • 目标测试
      • 写Ch的启发式方法