我需要帮助找出如何测试旧的旧版asp.net Web表单。
我们项目中的很多网页都是很久以前编写的,现在它已经到了维持/添加额外功能的痛苦之中。没有任何方法。这些代码不是模块化的,服务器端代码在前页(.aspx)与UI逻辑混合在一起。
重写这些传统的asp.net网络表单似乎是获得长期利益的唯一途径。但是,这是我们的问题。这些页面现在都可以正常工作,但我们团队中没有人完全理解他们背后的业务逻辑,并且逐行阅读代码将非常痛苦。我们认为可能会编写一些测试用例并对我们新近重新考虑的现代Web表单应用相同的测试,并比较结果将更有前途和准确。
有谁知道我怎么能这样做?如果代码没有组织和madularized,如何测试传统的asp.net Web表单?任何建议或建议都会有所帮助。
到目前为止,我已经看过Selenium但看起来这更像是用于UI测试而不是用于业务逻辑。我主要关注的是数据从数据库中提取并显示在表单上,以及在提交后将哪些数据写入数据库(尤其是哪些表)。
另外看看Visual Studio内置的Test Studio,但似乎这种方法需要在方法和函数中组织代码,所以我没有继续阅读。
我想到的另一个想法是监控数据库并查看在我手动打开网页并输入/提交一些数据期间哪些表发生了变化。这是一个不错的选择吗?
任何想法都将不胜感激。谢谢!
答案 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!");
}
现在,关键在于 - 大多数(如果不是所有这些测试)甚至不会编译,即使是少数人,也可能失败。这实际上是件好事!因为现在你已经清楚地了解了你必须做的事情 - 即通过实施新设计来完成这些测试。最好在原版的一个分支中做到这一点!
因此,在上面的示例中,您甚至可能没有明确定义的登录“模块” - 代码可能分散在多个页面和类中。但是,通过在理想设计的基础上预先编写“理想”测试,您现在可以实现目标。而且你也不必完全纯粹地对待它 - 弯曲规则并使一些测试比理想情况更细粒度是没有罪的 - 你可以回来后再做。
祝你好运!