VB.NET单元测试项目创建另一个项目的实例

VB.NET单元测试项目创建另一个项目的实例,vb.net,unit-testing,Vb.net,Unit Testing,我有一个名为MyProject的内置项目,我想开始单元测试。 我在解决方案中创建了一个名为MyProjectTest的单元测试项目。我想测试多个函数,但我的问题是大多数函数都引用MyProject中模块内的全局变量 因此,当我调用一个函数并传递它所需的参数时,一切都正常,直到它尝试引用它认为为空的全局变量为止。我可以在我的测试项目中设置这个全局变量,但它会一直查看MyProject全局变量,而不是我在MyProjectTest中创建的那个 我可以创建MyProject的一个实例,然后在那里设置这

我有一个名为MyProject的内置项目,我想开始单元测试。 我在解决方案中创建了一个名为MyProjectTest的单元测试项目。我想测试多个函数,但我的问题是大多数函数都引用MyProject中模块内的全局变量

因此,当我调用一个函数并传递它所需的参数时,一切都正常,直到它尝试引用它认为为空的全局变量为止。我可以在我的测试项目中设置这个全局变量,但它会一直查看MyProject全局变量,而不是我在MyProjectTest中创建的那个


我可以创建MyProject的一个实例,然后在那里设置这个变量吗?如何让函数查看MyProjectTest变量

我刚刚开始进行单元测试,在遗留代码中存在这个问题,我无法实际更改全局变量的使用。我搜索了一下,没有找到解决办法。为了解决这个问题,我在被测试的代码中创建了一个子例程,它初始化测试所需的全局值,并从测试类的类Initialize调用它

我还没有决定如何在部署中处理这个问题。当前的想法是有一个编译器选项,这样初始化代码就不会在发行版中编译,并将特性分配给编译发行版时不应该运行的测试

<TestClass()> _
Public Class modLanguagesTest
    Private testContextInstance As TestContext
~~~~
    <ClassInitialize()> _
    Public Shared Sub modLanguagesTestInitialize(ByVal testContext As TestContext)
        UnitTest_InitializeGlobals()
    End Sub
~~~
    <TestMethod()> _
    Public Sub WHEN_No_Locale_Matches_EXPECT_String_Empty()
        Dim strSystemLanguage As String = "en-US"
        Dim expected As String = String.Empty
        Dim actual As String

        actual = modLanguages.getMatchingLanguage(strSystemLanguage)
        Assert.AreEqual(expected, actual)
    End Sub
End Class


Public Module modLanguages                         <=== this is module under test
~~~~
    Public Sub UnitTest_InitializeGlobals()        <=== this initializes globals for the test
        g_colUILanguageValues = New Collections.SortedList
        g_colUILanguageValues.Add(0, "English en-GB")
        g_colUILanguageValues.Add(1, "Deutsch de-DE")
    End Sub
~~~~
    ''' <summary>                                  <=== this is the function being tested
    ''' Searches the installed languages for a match to the passed string
    ''' </summary>
    ''' <param name="strSystemLanguage">string to match</param>
    ''' <returns>Installed Language parameter that matches the passed string</returns>
    ''' <remarks></remarks>
    Public Function getMatchingLanguage(ByVal strSystemLanguage As String) As String
        Dim strInstalledLanguage As String
        Dim strRslt As String = String.Empty

        For Each lng In g_colUILanguageValues.Values
            strInstalledLanguage = lng.ToString
            If strInstalledLanguage.Contains(strSystemLanguage) Then
                strRslt = strInstalledLanguage
                Exit For
            End If
        Next

        Return strRslt

    End Function