采取措施将单元测试慢慢集成到项目中

时间:2009-06-19 13:17:33

标签: asp.net vb.net unit-testing stored-procedures n-tier-architecture

我目前正在与其他一位合作学生一起参与一个接近完成项目的合作项目。由于这个项目已经从合作社转移到合作社,因此一直采取不良做法,测试一直持续到最后。我已经决定在测试时编写单元测试来学习新东西。

但是,我正在开发一个3层,紧密耦合的应用程序,似乎无法以当前形式进行单元测试。我不想通过在一夜之间重构代码来摒弃其他合作学生而不了解任何这些概念。那么我应该采取什么步骤来慢慢将代码拉向单元可测性?我应该先实施工厂模式,让其他学生在继续前进之前熟悉它吗?

如果我的知识存在缺陷并且不存在任何问题,我道歉。我是新手:)

4 个答案:

答案 0 :(得分:7)

Michael Feathers的

Working Effectively with Legacy Code

很难知道实现工厂模式是否有用,取决于代码的作用:)

答案 1 :(得分:2)

答案 2 :(得分:1)

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

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

我最好的建议是采取一小步。

首先创建单元测试程序集(或项目或其他),但不进行任何测试。然后找到一个相当清晰且分离的单个小区域代码,并为该区域编写一些单元测试。让你的联合编码人员也要看一看并开始学习一些“最佳实践”,例如每次签入任何代码时都要运行单元测试(如果可能的话,自动运行)。

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

关键是慢慢来。就像我说的那样,让旧代码免于测试开始变得更容易。一旦您的团队掌握了单元测试的想法并且在编写单元测试方面变得更好,您可以随后返回它。

答案 3 :(得分:1)

如何围绕代码中的主要功能编写一系列黑盒测试?由于您提到它是一个ASP.NET项目,因此您可以使用WaitNSelenium等框架来自动化Web浏览器。这为您提供了一组基本功能,无论代码更改多少,都应保持不变。

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