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