有没有适用于VB6的好的TDD工具或资源?

15

是的,我知道我落后了时代,但我拥有一款古董 VB6 编辑器应用程序,我相信没有人会很快升级到 .NET。它使用了几个第三方 DLL 工具,并且由于它仍在使用老旧的 RichEdit 控件,我基本上可以光靠这个工具就自己制造 Bug。

所以,够了,我想看看是否可以使用 TDD,以便为需要修复的每个行为/功能编写单元测试,这样我迟早会拥有一个完整的回归测试套件用于这个工具。即使在将来我们升级到 .NET,我认为我编写的大多数测试都应该有助于验证正确的行为,并且也可以升级到 .NET 版本,我猜想。

一些基本的搜索将我带到了这个称为 simplyVBunit 的工具,但我找不到足够的指南等来让我开始,而且我对 VB6 也不是很精通 :(

  1. 那么,有人知道我可以使用哪些好的工具/资源来为这个 VB6 应用程序使用 TDD 吗? [最好能够升级到 .NET,以防万一。]
  2. 或者,我可以通过一些变通方法,实际上使用那些 .NET 的单元测试框架,例如 NUnit 等吗?
  3. 还是有更棒的方法来完成这项工作吗?

谢谢 :)

编辑:

我尝试过使用 vbunit,但发现没有简单的方法将其添加到现有应用程序中,或者至少不是我所知道的。因此,我找到了这个 vb-lite-unit 和这个 comunit 来进行测试。另外,有人说我们可以使用 NUnit with vb6,但这方面的资源甚至更少。

3个回答

11
我已经使用SimplyVBUnit拥有了非常流畅的TDD体验。我认为附带的代码示例相当自说明。
在启动时,您的初始加载的表单包含该控件。然后,在Form_Load子程序中:
 AddTest New TestDifferentAsserts

TestDifferentAsserts是一个VB类。 它看起来像这样:

Public Sub TestFloatCompareTolerance()
   ' we will use the default tolerance of 0.00001
   Assert.AreEqual 9#, 9.000001, "Should be equal!"

   ' The Expected value must be a Double or Single
   ' for the tolerance to be used in the comparison.
   Assert.AreEqual 9, 9.000001, "This will fail because we didn't use a float for the expected value."
End Sub

事实上,明天我会重新安装VB6在我的电脑上,用simplyvbunit进行编程实验。
[添加编辑]
这是我在VB6中的项目浏览器:

project explorer

Form1是简单vbunit控件所在的位置。

此项目的源代码

如果您有第三方控件,那没关系。用门面将它们包装起来。然后从门面创建存根。

如果需要进一步帮助,请留言。


嗯,也许我太忙于寻找最好的TDD工具,没有真正注意到这个工具。那我会回去重新审视一下这个工具。谢谢。 - melaos
@Gutzofter,实际上我的应用程序由一个主exe和大量第三方dll组成。在这种情况下,我该如何设置测试呢?谢谢。 - melaos
+1 我现在已经使用了几周,有时会出现一些小问题,但它对我帮助很大。 - Dabblernl
@dabblernl - 它有什么bug吗?我还没有遇到任何问题。但是在这里发表评论让其他人了解它的弱点会很好。 - Gutzofter
我遇到的问题:每个测试后都会调用FixtureTeardown方法。在代码步进过程中退出测试可能会导致丑陋的错误消息,有一次我需要重新构建测试项目才能使其再次正常工作。 - Dabblernl

7

VBUnit 在我以前的一个VB6项目中表现良好。


谢谢你的建议,我会尝试一下 :) - melaos
@melaos - 我不确定你的意思。虽然我已经有一段时间没有使用它了,但我不记得在将其添加到现有应用程序时遇到任何问题。事实上,我是从一个没有单元测试的项目开始的。 - Jim Anderson
@Jim,我按照教程操作了,可以成功创建一个新的vbtest项目。但是当我尝试将vbtestframework和fixture添加到我的现有项目中时,无法使vbrunner正常工作。它声称iSuite为UDF类型,并且找不到它。 - melaos
@melaos 我不知道。我从来没有遇到过这样的问题。 - Jim Anderson
@Jim,我的应用程序实际上由一个主执行文件和大量第三方 DLL 组成。在这种情况下,我该如何设置测试?谢谢。 - melaos
显示剩余2条评论

7
我处于这样一种情况:我们有一个庞大的VB6应用程序,正在迁移到.NET。迁移版本已经进行了全面的单元测试。
我们采取的方法是通过COM互操作从.NET对VB6应用程序进行单元测试。到目前为止,我们发现的主要优点是VB6开发人员最终学会了TDD(以及它所涉及的所有内容):
- 方法论:先测试,后编码。 - 架构:SoC、内聚性、DRY等。 - 技术:测试和模拟框架、IoC容器等。
这个解决方案极大地提高了迁移版本的代码质量,因为他们了解如何以使测试更易于进行的方式来构建架构。此外,还有一个潜在的机会可以在VB6版本和.NET版本上使用相同的测试。
不确定这个解决方案是否对您的问题过于过度设计。您应该评估它是否适用于您的情况。
敬礼。

@Benjamin,你用什么工具进行单元测试的?NUnit? - melaos
我已经使用MbUnit两年了,对它感到满意。我强烈推荐使用MbUnit 2.4。在转向版本3之前再等一会儿,因为它仍然存在错误。 - Ben Arroyo
这听起来可能有些夸张,但对我们其他人来说是有用的信息 - 谢谢Benjamin。 - MarkJ
@Benjamin 谢谢,@MarkJ 嘿嘿只要有用,尽管回答 :) - melaos

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