你如何使用第三方DLL单元测试.EXE?

时间:2009-02-03 03:00:34

标签: unit-testing vb6 tdd simplyvbunit

我还在学习TDD的黑暗艺术和最近的I've been trying to learn how to do TDD in VB6以及我基本上缩小列表范围的是免费的简单帐户和最昂贵的vbunit3。

我的应用程序是一个富文本编辑器,有很多第三方dll,我在谷歌中搜索高低,以找到如何对这个exe文件进行单元测试。

所以我的问题是你如何对exe文件进行单元测试?特别是在VB6的上下文中,如果你有任何关于vbunit3或simplyvbunit的好例子,你只是一个救星,因为我现在正在研究材料,我仍然不能写一个单元测试:(

修改

实际上,该应用程序包含许多表单,模块和类模块,当我编译它时,它当然变得很好整齐打包.EXE文件。而且为了使事情变得更加复杂,有许多全球变量飞来飞去。

但我的主要目的是对所有或最易破解的部分代码进行单元测试。我想确保我可以保持测试和代码分开。所以我认为最好的方法是,通过添加引用等方式直接测试exe。

有更好的方法吗?

6 个答案:

答案 0 :(得分:6)

单元测试和集成测试之间存在差异。您没有对可执行文件进行单元测试。您可以单独测试小型,独立的计算单元,如方法或过程,具体取决于您使用的语言。集成测试将测试更大的组件,如API,第三方组件,甚至可执行文件,以确保它们按照预期的一组输入(好的或坏的)工作。虽然您可以使用单元测试工具对API或插件组件进行一些集成测试,但我认为您不会发现许多用于测试可执行文件的单元测试工具。还有其他类型的测试工具可以在这方面做得更好。简单地编写提供不同类型输入的脚本并检查其输出可能足以满足许多场景。

如果您想了解有关TDD和单元测试的更多信息,您应该将它应用于VB6中的函数或过程 - 尽管如此,我建议使用VB.NET(或C#)并进行面向对象的开发。通常,这些工具面向OO风格的编程。

答案 1 :(得分:4)

VB中的ActiveX控件可以节省大量时间,但它们是有效的测试驱动开发的祸根。

为了有效地测试整个VB6应用程序,你需要有一个设计,其中EXE是一个瘦的shell,而不是完成所有工作的ActiveX DLL。表单实现了一个接口并向DLL注册自己。因此,如果您有订单输入表单,它将实现该IOrderEntryForm接口,它的事件将调用位于MyAppUI对话框中的OrderEntry类上的方法。

要在Visual Basic 6中强调,FORMS可以实现一个接口。然后,表单在其LOAD事件中注册自己的UI类。表单的事件(如MyButton_Click)调用UI类上的方法。 UI类使用Form Interface的方法来更改显示的内容。这是额外的工作,但它节省了大量的测试时间。还可以进行维护,因为只要实现的接口保持不变,您就可以更改表单的外观。

这也意味着在你有类似MYEXE->之前,MyActiveXDLL会变成MYEXE-> MyUIDLL-> MyActiveXDLL。

对于您的测试环境,您可以创建一个ActiveX DLL,通过创建实现各种表单界面的类来模拟UI。 UI DLL不知道区别,您可以完全控制发送的输入和读取的内容。

请注意,这种类型的设计模式是here。我用它作为开发和维护我公司金属切削机床CAD / CAM应用的基础。

第三方ActiveX控件是此方案的祸根。这是因为执行繁重的代码在控件本身内部。 ActiveX控件越复杂,问题就越严重。我公司的趋势是减少对第三方控制的依赖,转而支持内部应用程序。

然而,与任何算法和设计模式一样,这涉及判断调用。您在涉及富文本控件的软件领域中遇到了多少问题。如果不是很多,那么您可以通过手动或自动(即向应用程序发送击键)来使用测试脚本,并使用单元测试框架。

使用单元测试ENTIRE应用程序的关键要素是尽可能多地填充接口背后的内容。现在就做你能做的事情,记下你未来发展时想要改变的领域。如果您没有立即100%的报道,甚至明年都没有,请不要绝望。

答案 2 :(得分:1)

另一种使用的技术是使应用程序成为ActiveX EXE。然后,您的单元测试应用程序可以引用您的应用程序,就好像它是一个ActiveX DLL。自从我上次使用VB6以来,你需要进行相当多的研究以使其正常工作,我确信有一些技巧可以使它工作。

答案 3 :(得分:0)

关于我可能给出的唯一有用的建议是选择Michael Feathers Working Effectively with Legacy Code。我认为你最大的挑战将是你的工具集,因为我知道VB6单元测试的工具并不那么强大。

您也可以尝试询问TDD Yahoo! List,因为我知道至少有几个人在那里使用vbunit3。

答案 4 :(得分:0)

当然,您可以对单个EXE进行单元测试。看看有多少应用程序由多个EXE组成。

对于第三方组件,您如何使用标准VB6组件进行测试?其他MS组件?与第三方组件相同。

答案 5 :(得分:0)

  

并且要做得更多   复杂的有很多   全球变量飞来飞去。

第一次重构是将全局变量传递给ActiveX DLL中的类。该类的实例化属性需要设置为GLOBAL MULTIUSE。当设置EXE以引用ActiveX时,变量仍然是全局的,但是当你撕掉EXE以用测试工具替换它时,线束可以访问全局变量。

完成测试后,您可以进行进一步的重构以减少全局变量的数量。