Unit Testing in VB.NET
Unit Testing for Tax Calculation
Section titled “Unit Testing for Tax Calculation”This example is divided into two pillars
- SalaryCalculation Class : Calculating the net salary after tax deduction
- SalaryCalculationTests Class : For testing the method that calculates the net salary
Step 1: Create Class Library, name it WagesLibrary or any appropriate name. Then rename the class to SalaryCalculation
''' ''' Class for Salary Calculations ''' Public Class SalaryCalculation
''' <summary> ''' Employee Salary ''' </summary> Public Shared Salary As Double
''' <summary> ''' Tax fraction (0-1) ''' </summary> Public Shared Tax As Double
''' <summary> ''' Function to calculate Net Salary ''' </summary> ''' <returns></returns> Public Shared Function CalculateNetSalary() Return Salary - Salary * Tax End FunctionEnd ClassStep 2 : Create Unit Test Project. Add reference to the created class library and paste the below code
Imports WagesLibrary 'Class library you want to test
''' <summary>''' Test class for testing SalaryCalculation''' </summary><TestClass()> Public Class SalaryCalculationTests
''' <summary> ''' Test case for the method CalculateNetSalary ''' </summary> <TestMethod()> Public Sub CalculateNetSalaryTest() SalaryCalculation.Salary = 100 SalaryCalculation.Tax = 0.1 Assert.AreEqual(90.0, SalaryCalculation.CalculateNetSalary(), 0.1) End SubEnd ClassAssert.Equal checks the expected value against the actual calculated value. the value 0.1 is used to allow tolerance or variation between expected and actual result.
Step 3 : Run the test of the method to see result

Testing Employee Class assigned and derived Properties
Section titled “Testing Employee Class assigned and derived Properties”This example has more tests available in unit testing.
Employee.vb (Class Library)
''' <summary>''' Employee Class''' </summary>Public Class Employee
''' <summary> ''' First name of employee ''' </summary> Public Property FirstName As String = ""
''' <summary> ''' Last name of employee ''' </summary> Public Property LastName As String = ""
''' <summary> ''' Full name of employee ''' </summary> Public ReadOnly Property FullName As String = ""
''' <summary> ''' Employee's age ''' </summary> Public Property Age As Byte
''' <summary> ''' Instantiate new instance of employee ''' </summary> ''' <param name="firstName">Employee first name</param> ''' <param name="lastName">Employee last name</param> Public Sub New(firstName As String, lastName As String, dateofbirth As Date) Me.FirstName = firstName Me.LastName = lastName FullName = Me.FirstName + " " + Me.LastName Age = Convert.ToByte(Date.Now.Year - dateofbirth.Year) End SubEnd ClassEmployeeTest.vb (Test Project)
Imports HumanResources
<TestClass()>Public Class EmployeeTests ReadOnly _person1 As New Employee("Waleed", "El-Badry", New DateTime(1980, 8, 22)) ReadOnly _person2 As New Employee("Waleed", "El-Badry", New DateTime(1980, 8, 22))
<TestMethod> Public Sub TestFirstName() Assert.AreEqual("Waleed", _person1.FirstName, "First Name Mismatch") End Sub
<TestMethod> Public Sub TestLastName() Assert.AreNotEqual("", _person1.LastName, "No Last Name Inserted!") End Sub
<TestMethod> Public Sub TestFullName() Assert.AreEqual("Waleed El-Badry", _person1.FullName, "Error in concatination of names") End Sub
<TestMethod> Public Sub TestAge() Assert.Fail("Age is not even tested !") 'Force test to fail ! Assert.AreEqual(Convert.ToByte(36), _person1.Age) End Sub
<TestMethod> Public Sub TestObjectReference() Assert.AreSame(_person1.FullName, _person2.FullName, "Different objects with same data") End SubEnd ClassResult after running tests
Remarks
Section titled “Remarks”This is the simplest yet descriptive example for the unit testing procedure. Feel free to add more methods to check against different data types.


