测试旧版ASP.NET Web窗体

时间:2014-03-03 22:59:03

标签: c# asp.net sql-server unit-testing selenium

我需要帮助找出如何测试旧的旧版asp.net Web表单。

我们项目中的很多网页都是很久以前编写的,现在它已经到了维持/添加额外功能的痛苦之中。没有任何方法。这些代码不是模块化的,服务器端代码在前页(.aspx)与UI逻辑混合在一起。

重写这些传统的asp.net网络表单似乎是获得长期利益的唯一途径。但是,这是我们的问题。这些页面现在都可以正常工作,但我们团队中没有人完全理解他们背后的业务逻辑,并且逐行阅读代码将非常痛苦。我们认为可能会编写一些测试用例并对我们新近重新考虑的现代Web表单应用相同的测试,并比较结果将更有前途和准确。

有谁知道我怎么能这样做?如果代码没有组织和madularized,如何测试传统的asp.net Web表单?任何建议或建议都会有所帮助。

到目前为止,我已经看过Selenium但看起来这更像是用于UI测试而不是用于业务逻辑。我主要关注的是数据从数据库中提取并显示在表单上,​​以及在提交后将哪些数据写入数据库(尤其是哪些表)。

另外看看Visual Studio内置的Test Studio,但似乎这种方法需要在方法和函数中组织代码,所以我没有继续阅读。

我想到的另一个想法是监控数据库并查看在我手动打开网页并输入/提交一些数据期间哪些表发生了变化。这是一个不错的选择吗?

任何想法都将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

  

这些页面现在都可以正常工作,但我们团队中没有人完全理解他们背后的业务逻辑,逐行阅读代码会非常痛苦。

  • 好的,所以这真的是你问题的症结所在。您是否可以访问此应用程序的利益相关者(即它是为谁设计的?)他们可能是最好的人向您解释它应该如何工作。您需要访问这些人并让他们至少为您提供应用程序“域”中的崩溃课程。

  • 只有当您和您的同事完全了解此系统的工作原理时,才能对其进行测试。如果您无法访问利益相关者,那么请不要惊慌 - 只需将此事件一次放在一个模块中并开始将其映射出来。

  • 你不需要全力以赴,全面了解整个事情 - 一次拿一个模块或子系统,制作大量关于业务领域各个部分的图表从用户的角度开展工作,然后对当前的工作方式做同样的工作。将两个图并排放置,并开始计划如何重构代码,使其更像业务流程,而不是像现有流程那样。

  • 这肯定是一个棘手的过程,但实际上一旦你开始,特别是一旦你知道系统应该如何理想地基于前一点流动,它并没有那么糟糕 - 请记住,你肯定会能够复制/粘贴大量现有代码 - 事实上,您应该避免试图在此阶段动态修复错误的诱惑。重点关注你的课程的组织等,以便遵守SOLID - 任何广泛坚持这一点的课程通常都是非常可测试的。

  • 在此阶段可以标记任何错误或编写得非常糟糕的代码以便稍后修复;这里的关键点是 reaorganise 不能重写!

  • 有了这些知识,下一步就是根据模块的新设计为应用程序的各个部分编写测试规范。这意味着,许多测试和测试方法(使用您喜欢的任何框架,MSTest或xUnit等)。你真的无法避免这种情况,但请记住,一次只有一个模块!

  • 正如DanielMann所指出的,可能值得看一下像Specflow这样的东西,它可以让你以自然(ish)的语言形式编写测试规范 - 你甚至可以让他的利益相关者董事会帮助编写测试!

  • 您不必首先指定每个细节;一旦你在逻辑方面确定了主要的“业务单位”,就可以将它们划分为越来越小的概念行为

所以你最终可能会得到像(只是一个例子)

这样的测试
LoginModule_WhenPasswordIsWrong_RedirectswithErrorMessage()
{
   //write some code in here that exercises the LoginModule and assert that it behaves as expected
   //The really important thing is to write these tests based on the NEW design
   //and NOT the existing system.
   Assert.Fail("Write the test!");
}

现在,关键在于 - 大多数(如果不是所有这些测试)甚至不会编译,即使是少数人,也可能失败。这实际上是件好事!因为现在你已经清楚地了解了你必须做的事情 - 即通过实施新设计来完成这些测试。最好在原版的一个分支中做到这一点!

因此,在上面的示例中,您甚至可能没有明确定义的登录“模块” - 代码可能分散在多个页面和类中。但是,通过在理想设计的基础上预先编写“理想”测试,您现在可以实现目标。而且你也不必完全纯粹地对待它 - 弯曲规则并使一些测试比理想情况更细粒度是没有罪的 - 你可以回来后再做。

  • 冲洗并重复 - 你所做的每一个系统,明天就更少了!
  • 一旦你的初始测试方法集合通过,你就可以“放大”并开始细化它们,在这个过程中修复bug和糟糕的代码(在很多方面同样的事情:)你之前遇到过。

祝你好运!