我知道有人曾问过这个问题,但现时的问题都没有为我的具体个案提供足够的答案。
我是一个孤独的开发人员,主要在空闲时间从事一个项目。到目前为止,我已经接近100个类了,我开始意识到,对许多类的测试正在变得令人生畏。特别是当我返回并为=、<>、CType和Not添加操作符重载时;实现IComparable(Of T)、IEquatable(Of T)、IEqualityComparer(Of T);以及重写基本方法(如Equals和GetHashCode )。
我目前的测试方法是在单个按钮后面的虚拟表单上随意地为特定类/方法拼凑出一些Debug.Print代码,运行该项目,单击该按钮,并确保Debug窗口具有我的期望值。但这既乏味又开始成为浪费时间。
我知道我需要做的是为每个类起草一组特定于该类的测试,以测试其功能。所以我去看看测试框架,比如NUnit,Gallio/MbUnit等等,但是我真的看不到它们的价值。到目前为止,我似乎可以为每个实现的类编写一个专用的测试类,封装在#If DEBUG/#End If块中,并将它们链接到大型表单上的一堆按钮,以运行我的测试。
但以我目前的速度计算可能需要几个星期。所以我征求他们对如何处理这样的问题的意见。找出如何将这些开源测试框架集成到我的项目中更好吗?还是我应该编写一堆测试类并输出它们的数据呢?
我使用VB Express 2010和VS 2010,这取决于我使用的是哪台计算机,因此我需要能够在这两种计算机中进行测试。我不会在短期内将项目转换为C#,所以我希望得到与VB.NET兼容的答案。
谢谢!
发布于 2011-02-16 07:48:11
由于您没有给出测试的外观示例,所以我假设您的测试是通过契约式设计的,它在调试构建中执行某些功能时检查参数和(中间)结果。这是一个完美的解决方案,确保在执行特定任务时不会出现错误的结果。
在实现新特性时,调试输出是有价值的。
当前解决方案的缺点是,如果执行该功能并手动验证调试输出,则只存在验证错误。您必须手动触发每个函数,以确保程序仍按预期工作。
因为您的测试过程通常只在您实现或扩展某些功能"A“时执行,但是如果您更改了与"A”无关的特性"B“的代码,则不会执行。"A“和"B”往往是间接相关的,实施"B“就会打破"A”。这被称为回归错误。
使用NUnit和类似的系统,如果您运行测试套件,您可以确保所有的功能都经过测试。
然而,使用NUnit编写和维护单元、集成和端到端测试要比应用DesignByContract测试或manuallyVerifyDebugOutput测试困难得多。
另一方面,在使用单元测试进行测试驱动的开发时,您可以为您的应用程序获得额外的体系结构好处。
https://stackoverflow.com/questions/5012304
复制相似问题