Few days ago I have discover interesting PowerShell module Pester for creating unit tests in PowerShell. As a code for testing is used PowerShell script from my previous post dedicated to password generation. PowerShell module Pester is installed using command:
Install-Module -Name Pester -Force -SkipPublisherCheck
Installed PowerShell modules can be listed by:
Get-InstalledModule
Unit test of New-AzureSqlPassword.ps1 script is saved to New-AzureSqlPassword.Tests.ps1 file and has following code:
Describe "New-AzureSqlPassword" { It "Should return password 32 characters long" { $password = .\New-AzureSqlPassword.ps1 $password.Length | Should -Be 32 } Context "Password complexity" { It "Should contain lowercase letters" { $password = .\New-AzureSqlPassword.ps1 $measure = $password.GetEnumerator() | Where-Object { [System.Char]::IsLower($_) } | Measure-Object $measure.Count | Should -BeGreaterThan 0 } It "Should contain uppercase letters" { $password = .\New-AzureSqlPassword.ps1 $measure = $password.GetEnumerator() | Where-Object { [System.Char]::IsUpper($_) } | Measure-Object $measure.Count | Should -BeGreaterThan 0 } It "Should contain digits" { $password = .\New-AzureSqlPassword.ps1 $measure = $password.GetEnumerator() | Where-Object { [System.Char]::IsDigit($_) } | Measure-Object $measure.Count | Should -BeGreaterThan 0 } It "Should contain special characters" { $password = .\New-AzureSqlPassword.ps1 $measure = $password.GetEnumerator() | Where-Object { ($_ -eq '!') -or ($_ -eq '$') -or ($_ -eq '#') -or ($_ -eq '%') } | Measure-Object $measure.Count | Should -BeGreaterThan 0 } } Context "Password difference" { It "Should return different passwords when calling two times" { $password1 = .\New-AzureSqlPassword.ps1 $password2 = .\New-AzureSqlPassword.ps1 $password1 -eq $password2 | Should -BeFalse } } }
PowerShell script and it’s unit test is placed in the same folder:
Unit test is run using command:
Invoke-Pester
Output of unit test is:
If you are interested in PowerShell automation, take my Udemy course Improve your productivity with PowerShell.