将.NET应用程序转换为测试驱动的应用

时间:2011-08-26 10:24:14

标签: c# .net winforms unit-testing design-patterns

我有一个用.NET 2.0编写的旧WinForm应用程序。应用程序不遵循任何模式或图层模式。我的客户现在想引入单元测试框架。由于它是实时应用程序,因此重新编写整个代码非常危险。我应该采用什么方法?

先谢谢

6 个答案:

答案 0 :(得分:4)

有一本我经常看到的关于这个问题的书,我没看过,但它似乎适合你的问题,虽然我不知道它的WinForms是否使这一点变得复杂。

“有效使用旧版代码”

http://books.google.ie/books?id=CQlRAAAAMAAJ&q=dealing+with+legacy+code&dq=dealing+with+legacy+code&hl=en&ei=LnVXTrviCtSu8QPEwei0DA&sa=X&oi=book_result&ct=result&resnum=1&ved=0CC0Q6AEwAA

答案 1 :(得分:0)

在WinForms中,单元测试真的很难,因为后面的代码与GUI本身紧密相关。一些自动化测试可能是您在WinForms应用程序上获得的最佳选择,而不会让您更改程序。

如果您的客户想要一个可测试的解决方案,我建议在WPF中使用它并使用像Caliburn.Micro这样强调单元测试的MVVM框架。

不幸的是,这意味着重写整个应用程序。

简短回答

重写应用程序,或者对单元测试不感兴趣。

答案 2 :(得分:0)

由于WinForms应用程序通常具有与底层“数据模型”强烈耦合的UI,因此某种形式的自动UI测试可能是您最好的选择 - 即外部应用程序模拟用户的点击以及与UI的其他交互并检查是否在此之后你的程序处于预期状态。

您可能需要查看:

http://smartbear.com/products/qa-tools/automated-testing/supported-testing-types/functional-testing/

答案 3 :(得分:0)

要进行UI测试(因为它基于.net),您可以使用.Net轻量级测试自动化功能。详情http://msdn.microsoft.com/en-us/magazine/cc163864.aspx 您不必使用外部工具来自动化它。但同样,要测试底层或业务逻辑,您必须扩展测试用例。

答案 4 :(得分:0)

我建议你将最关键的部分移动到正常的C#类并对它们进行单元测试。然后只对GUI的复杂部分进行UI测试。我参与了一个遗留项目,但是使用ASP.NET Webforms而不是Windows Forms,我注意到系统的某些部分经常更改并且是重构和单元测试的良好候选者,而其他部分从未改变过,只是不值得测试的努力。

如果这是一个大项目,那么这可能需要很长时间。这项工作的一大部分是使代码可测试并引入某种MVP(Model-View-Presenter)模式,以便能够将GUI代码与业务逻辑分开。

我强烈建议按照Eoin Carroll的建议有效地使用旧版代码。它描述了使用遗留代码的技术,并通过显示它可以完成来提供动机(您可能会遇到一些困难时期)。

另外,请查看这两个StackOverflow问题(herehere),以便讨论WinForms和MVP。

答案 5 :(得分:0)

这取决于您要测试的内容以及应用程序的编写方式。

GUI难以测试,但请查看其他一些答案。如果我怀疑你只是想测试业务层,那就更容易了:

如果应用程序将业务和GUI分离,那么您可以轻松地使用NUnit,或者通过从IDE集成到项目中,或者以NUnit自己的方式,然后编写测试以涵盖业务层向公开层提供的功能。 GUI。

如果应用程序没有解耦,并且GUI中有很多逻辑,那么你真的需要重构和解耦。如果不这样做,您将被限制为通过GUI进行测试,这很难并且不是真正的全面证明,这意味着对GUI的微小更改可能会使您对业务逻辑的测试无效。