2016-11-29 45 views
0

为了更好地管理我正在处理的VB6中的这些旧代码,我开始使用单元测试。我从一个小型的演示应用程序开始进行C#单元测试以掌握它,然后开始使用SimplyVBUnit(我仍然不熟练)。如何在.NET中单元测试VB6代码

我马上注意到,如果创建单元在VB6中测试,然后迁移我的代码,我将不得不重新创建\迁移我的测试代码在.NET端。我尝试通过搜索一种方法来解决这个问题,通过COM Interop来查看是否可以在.NET的单元测试项目中显示我的VB6方法,但无法找到很好的信息来源。

我想问的是,如果这种方法是可行的?如果是这样,那么完成此步骤的步骤是什么?

更新我:部分成功

周围搜索后,我发现我可以在VB6创建ActiveX DLL传递一个类。为了测试这一点,我创建了一个名为“为MyTestProject”中的ActiveX DLL模板创建一个新的VB6项目,并在它创建了一个名为CalculatorLib使用下面的代码类:

Public Function Addition(ByVal operand1 As Long, ByVal operand2 As Long) As Long 
    Addition = (operand1 + operand2) 
End Function 

Public Function Subtract(ByVal operand1 As Long, ByVal operand2 As Long) As Long 
    Subtract = (operand1 - operand2) 
End Function 

Public Function Divide(ByVal operand1 As Long, ByVal operand2 As Long) As Long 
    Divide = (operand1 + operand2) 
End Function 

然后按使下文件创建DLL - > Make MyTestProject.dll

在Visual studio 2015中创建一个新的单元测试项目。这是一个命名约定,但对于这个测试我没有考虑到这一点。

在解决方案资源管理器中选择您的项目,然后右键单击并选择添加,然后引用。在COM选项卡中搜索您的dll并将其添加到您的项目。 在测试我创建称为TestAdd一个(快速和肮脏的)测试方法:

[TestMethod] 
    public void TestAdd() 
    { 
     MyTestProject.CalculatorLib calculator = new MyTestProject.CalculatorLib(); 
     int io = calculator.Addition(10, 30); 
     Assert.AreEqual(io, 20); 
    } 

该测试失败,如所预期,并起了变化的30至10使试验合格。 JOY!

所以,现在我能够做到这一点如何测试我的模块和窗体中的函数和子,而不必在ActiveX DLL的类中转换它们呢?

回答

0

其实只有两个选择:

  1. 重新写在C#单元测试。
  2. 将您的VB6单元测试公开为ActiveX DLL函数。

无论哪种情况,您都需要编写某种形式的C#代码。如果VB6中的单元测试仍在使用,那么我建议您使用第二个选项,这样您就不必担心维护两组源代码。

在哪里工作,我们在C#中进行了所有的单元测试,因为我们希望尽可能远离传统产品。

+0

感谢回复@vbguyny。我确实认为用C#进行测试是一种可行的方法。我们目前没有实施单元测试。这是我试图在项目中介绍的内容。我正在阅读“单元测试的艺术:使用C#中的示例”和“使用遗留代码有效地工作”,因为我对这些主题相当陌生。因此,您可以提供的任何示例或信息来源将不胜感激。 – BMFS