单元测试旧版ASP.NET Webforms应用程序

单元测试旧版ASP.NET Webforms应用程序,.net,asp.net,unit-testing,legacy,.net,Asp.net,Unit Testing,Legacy,我继承了一个没有单元测试的遗留web应用程序。我想补充一些,但不知从何说起。我应该将它们添加到旧代码中吗?还是仅仅是新的代码?如果该代码与遗留代码交互会怎样?您有什么建议?传统应用程序是分层的吗 如果是这样,首先将单元测试添加到后端/业务层 如果没有,则在发现bug时(对于回归测试),将单元测试添加到新代码中 如果你有时间/雄心壮志(最终)对整个事情进行单元测试,那么就开始列出一系列特性(首先是关键特性)并为这些特性添加单元测试,一次添加几个。如果它是你继承的代码,那么你大概必须开始阅读它并理解

我继承了一个没有单元测试的遗留web应用程序。我想补充一些,但不知从何说起。我应该将它们添加到旧代码中吗?还是仅仅是新的代码?如果该代码与遗留代码交互会怎样?您有什么建议?

传统应用程序是分层的吗

如果是这样,首先将单元测试添加到后端/业务层

如果没有,则在发现bug时(对于回归测试),将单元测试添加到新代码中


如果你有时间/雄心壮志(最终)对整个事情进行单元测试,那么就开始列出一系列特性(首先是关键特性)并为这些特性添加单元测试,一次添加几个。

如果它是你继承的代码,那么你大概必须开始阅读它并理解它做什么和不做什么。我建议您编写单元测试,以反映您对代码库的日益理解。最终,您将建立一个关于遗留应用程序的知识体系,即“这些函数是通过这些测试的函数”,而不是“这些函数是具有这些实现的函数”。然后,您将有更多的自由和信心在不破坏任何东西的情况下进行更改。

首先,我建议对未来的所有更改进行单元测试,我想大多数人都会同意这是一个回归的好主意

然而,对于现有代码,这是其中一种情况,在这种情况下,您需要查看您愿意或允许在产品中引入多少风险。问题是,当您开始对现有代码库进行单元测试时,您很快就会意识到许多重构和设计优化的机会


从我这里可以看出,如果你是一个坚持良好设计的人,但你还没有被授权做出激烈的重构描述,那么当你试图为遗留部件编写测试时,你只会心碎——是的,如果它没有现有的测试套件,它将需要重构。如果不允许您对生产应用程序进行高影响的更改,那么最终将实现我们称之为“垃圾适配器模式”的东西。祝你好运

我不会为了测试而编写任何测试。我只会在发现bug或添加新功能时编写测试。然后编写测试,将需要更改/实现的代码框起来,以定义它当前的功能。如果出现bug,编写测试以证明bug已经修复。在新代码的情况下,它应该做什么。现在开始实施修复/新功能。如果您发现您试图在测试“框”之外接触代码——请编写更多的测试来框住该区域(或者重新考虑您想要做的更改)。根据需要逐步引入新的测试,以最大限度地提高您在测试中的投资。编写测试来证明工作代码可以工作似乎毫无意义,直到它被证明已被破坏。

如果web应用程序没有进行单元测试,那么它可能也不容易进行单元测试。将其置于单元测试之下可能会有风险,因为您没有[单元]测试,是的,没有鸡和蛋。此外,这需要时间,不会给应用程序带来太多价值

我的目标是为应用程序的遗留部分编写使用HtmlUnit或HttpUnit、YMMV的端到端自动测试。这些测试()将像单元测试一样,确定当前的应用程序行为,但从外部进行,允许您进行更改,并能够检测到不希望的副作用


为新代码编写单元测试,以及在更改旧代码时编写单元测试,无论是用于修复问题还是添加新功能

我建议买一份

我们在一个学习小组里阅读了这本书。这很痛苦,但很有用

主题包括:

  • 了解软件更改的机制:添加功能、修复bug、改进设计、优化性能
  • 将遗留代码放入测试工具
  • 编写测试以防止引入新问题
  • 可用于任何语言或平台的技术,在爪哇、C++、C和C<中使用
  • 准确识别需要进行代码更改的位置
  • 处理非面向对象的遗留系统
  • 处理似乎没有任何结构的应用程序
您可以在

的应用程序已知“痛点”的编写测试中看到对此的简短说明。经常中断或通常具有较高风险的代码是一个很好的起点,因为它有助于在该领域建立前线防御,并使团队暴露在该应用程序中的单元测试范围内

每次针对应用程序打开缺陷时,接下来,尝试编写一个单元测试来公开此行为。它会让你知道什么时候它被修复了,希望能防止它在将来再次被引入


另外,寻找需要重构的代码。任何重构工作都应该先创建单元测试。这有助于确保它在您进行更改之前和之后都能正常工作。重构一开始可能很困难,因为有“连锁反应”的风险,一次破坏可能会以意想不到的方式破坏整个应用程序。

Dupe。FWIW,这不是一个完全的骗局,因为他的是一个非网络应用程序,而我的应用程序是。另外,他已经假设他将为他的遗留代码编写单元测试。我的更像是“我很想,但是……”我希望社区不仅能说“去单元测试”,还能说“在X、Y和Z条件下不要去单元测试。”更新标题。。这样你就能得到更好的回应。。希望一切正常。@TZHX最终将接口放在您和框架之间,并将所有代码放在边界的一侧。因此,没有直接绑定到数据源。不是真的。它有层次,但有几个不同的层次