Hello
I am trying out Pester for the unit testing. Is there better another way to test this or am I doing completely wrong?
Here is the function I need to test for unit testing.
Function Add-SubnetToVNet{
Param(
[Parameter(Mandatory)]$SubnetName,
[Parameter(Mandatory)]$AddressPrefix,
[Parameter(Mandatory)]$ResourceGroupName,
[Parameter(Mandatory)]$VNetName
)
Process{
$PSVnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
Add-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $AddressPrefix -VirtualNetwork $PSVnet
Set-AzVirtualNetwork -VirtualNetwork $PSVnet
}
}
Here is the Pester test describe block.
Describe 'Add-SubnetToVNet'{
Mock -CommandName 'Get-AzVirtualNetwork' -MockWith{
$VnetObj = New-Object Microsoft.Azure.Commands.Network.Models.PSVirtualNetwork
$VnetObj.Name = 'VNet-Name'
$VnetObj.ResourceGroupName = 'RG-VNet-Name'
$VnetObj.Location = 'uksouth'
return $VnetObj
}
Mock -CommandName 'Add-AzVirtualNetworkSubnetConfig'-MockWith{
$SubnetObj = New-Object Microsoft.Azure.Commands.Network.Models.PSSubnet
$SubnetObj.Name = 'New-Subnet'
$SubnetObj.Id = '/subcriptions/random-guid-here/resourceGroups/RG-VNet-Name/Subnet-Name'
$SubnetObj.ProvisioningState = 'Succeeded'
$SubnetObj.AddressPrefix = '10.7.0.0/24'
return ($SubnetObj)
}
Mock -CommandName 'Set-AzVirtualNetwork' -MockWith{
$VnetObj.Subnets.Add($SubnetObj)
return $VnetObj
}
$TestVnet = Add-SubnetToVNet -SubnetName 'New-Subnet' -AddressPrefix '10.7.0.0/24' -ResourceGroupName 'RG-VNet-Name' -VNetName 'VNet-Name'
It 'Should return a VNet with a subnet'{
$TestVnet = Add-SubnetToVNet -SubnetName 'New-Subnet' -AddressPrefix '10.7.0.0/24' -ResourceGroupName 'RG-VNet-Name' -VNetName 'VNet-Name'
$TestVnet.Subnets | Should Not Be $null
}
}
It said the virtual network was null and the test failed.
Thanks.