VB.NET小型项目的测试框架?

3
我知道这个问题以前已经被问过了,但是现有的SO问题都没有为我的情况提供足够的答案。我是一名独立开发者,大部分时间都在闲暇时间里工作。到目前为止,我已经写了将近100个类,但我开始意识到测试这么多类变得令人望而生畏。特别是当我回头添加 =<>CTypeNot 的运算符重载以及实现 IComparable(Of T)IEquatable(Of T)IEqualityComparer(Of T) 等基础方法时,还要覆盖 EqualsGetHashCode 等基本方法时,这一点尤为明显。
我当前的测试方法是在一个虚拟窗体的单个按钮后面随机写一些特定类/方法的Debug.Print代码,运行项目,单击按钮,确保调试窗口中有我期望的值。但这既繁琐又浪费时间。
我知道我需要做的是针对每个类起草一组特定于该类的测试来测试其功能。所以我查看了像NUnit、Gallio/MbUnit等测试框架。但我真的看不出它们的价值。到目前为止,似乎我可以为每个实现的类编写一个专用测试类,并将其包含在#If DEBUG/#End If代码块中,然后将这些类链接到一个大窗体上的一堆按钮上来运行我的测试。
但是以我的当前速度,这可能需要几周的时间。所以我向SO询问他们如何处理这种情况的意见。我是不是最好找出如何将这些开源测试框架集成到我的项目中?还是应该只编写一堆测试类并将它们的数据输出到某个地方?
我使用VB Express 2010和VS 2010,根据我所在的计算机而定,因此我需要能够在两个环境下进行测试。我不会很快把项目转换成C#,所以我希望答案与VB.NET兼容。
谢谢!
1个回答

1

由于您没有提供测试样例,我假设您的测试是基于契约设计风格的,即在DEBUG版本中执行某些功能时检查参数和(中间)结果。这是一种完美的解决方案,可以确保在执行某个任务时没有错误的结果。

在实现新功能时,调试输出非常有价值。

您当前解决方案的缺点是,仅当执行功能并手动验证调试输出时才会出现验证错误。您必须手动触发每个函数,以确保程序仍按预期工作。

由于您的测试过程通常只在实现或扩展某些功能“A”时执行,而不是在更改与“B”功能无关的代码时执行。通常,“A”和“B”间接相关,并且实现“B”将破坏“A”。这称为回归错误。

使用NUnit和类似系统,您可以确保在运行测试套件时测试所有功能。

然而,使用NUnit编写和维护单元、集成和端到端测试比应用DesignByContract测试或manuallyVerifyDebugOutput测试要困难得多。

另一方面,当使用单元测试进行测试驱动开发时,您的应用程序将获得额外的架构优势。

我无法举例,因为我甚至还没有编写测试单元。我只是坐在那里,盯着我的代码,想知道测试的最明智方法是什么(在查看了一些上述测试框架的教程后)。我的很多代码都是直接字符串解析。每个类处理字符串的特定部分,将字符串的元素解析到内部变量中,并在调用类的 ToString 方法时将它们输出。因此,我的测试单元主要需要检查输入和输出解析。 - Kumba
要补充的是,实际上最困扰我的部分并不是每个类的字符串解析方面。相反,运算符重载似乎是最令人生畏的,因为我必须测试许多不同的对象比较方式,以确保重载正确地返回True/False,或正确处理任何异常(即NullReference)。 - Kumba
我还没有时间回到我的项目,但我会继续将这个答案作为接受的答案。我将跳过使用这些测试框架,直接编写一堆模块。我会找到方法来串联起来。谢谢! - Kumba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接