我知道之前已经提出这个问题,但现有的SO问题都没有为我的具体案例提供足够的答案。
我是唯一一个在空闲时间从事项目的开发人员。到目前为止,我正在接近100个课程,我开始意识到测试许多课程正变得令人生畏。特别是当我返回并添加=
,<>
,CType
和Not
的运算符重载时;实施IComparable(Of T)
,IEquatable(Of T)
,IEqualityComparer(Of T)
;并覆盖Equals
和GetHashCode
等基本方法。
我目前的测试方法是在单个按钮后面的虚拟表单上随机编写一些特定类/方法的Debug.Print
代码,运行项目,单击按钮,并确保调试窗口具有我的预期价值。但这既乏味又开始成为浪费时间。
我知道我需要做的是针对每个类,草拟一组特定于该类的测试来测试其功能。所以我去看看NUnit,Gallio / MbUnit等测试框架。但我真的没有看到它们的价值。到目前为止,我似乎可以为每个实现的类编写一个专用的测试类,包含在#If DEBUG/#End If
块中,并将它们链接到大型表单上的一堆按钮来运行我的测试。
但这可能需要数周时间才能达到目前的水平。所以我问他们如何处理这样的事情。我最好搞清楚如何将这些开源测试框架之一集成到我的项目中?或者我应该写一堆测试类并在某处输出他们的数据?
我使用的是VB Express 2010和VS 2010,具体取决于我所使用的计算机,因此我需要能够在两者中进行测试。我不会很快将项目转换为C#,所以我很欣赏与VB.NET兼容的答案。
谢谢!
答案 0 :(得分:1)
由于您没有给出测试外观的示例,我假设您的测试是按合同设计样式,在DEBUG构建中执行某些功能时检查参数和(中间)结果。这是一个完美的解决方案,可确保在执行特定任务时没有错误的结果。
在实现新功能时,调试输出很有价值。
当前解决方案的缺点是,如果执行功能并且手动验证调试输出,则只有验证错误。您必须手动触发每个功能,以确保程序仍按预期工作。
由于您的测试程序通常仅在您实现或扩展某些功能“A”时执行,但如果更改了与“A”无关的功能“B”的代码则不会执行。通常“A”和“B”间接相关,实施“B”将打破“A”。这称为回归错误。
使用NUnit和类似系统,您可以确保在运行测试套件时测试所有功能。
但是,使用NUnit编写和维护单元,集成和端到端测试比应用DesignByContract测试或手动验证调试输出测试要困难得多。
另一方面,在使用单元测试进行测试驱动开发时,您可以为应用程序获得额外的架构优势。