$actual | Should Be "actual value" # Test will pass
$actual | Should Be "not actual value" # Test will fail BeExactly Compares one object with another for equality and throws if the two obje cts are not the same. This comparison is case sensitive. $actual="Actual value" $actual | Should BeExactly "Actual value" # Test will pass $actual | Should BeExactly "actual value" # Test will fail BeGreaterThan Asserts that a number is greater than an expected value. Uses PowerShell 's -gt operator to compare the two values. $Error.Count | Should BeGreaterThan 0 BeLessThan Asserts that a number is less than an expected value. Uses PowerShell's -gt operator to compare the two values. $Error.Count | Should BeLessThan 1 Exist Does not perform any comparison but checks if the object calling Exist is presnt in a PS Provider. The object must have valid path synt ax. It essentially must pass a Test-Path call. $actual=(Dir . )[0].FullName Remove-Item $actual $actual | Should Exist # Test will fail Contain Checks to see if a file contains the specified text. This search is not case sensitive and uses regular expressions. Set-Content -Path TestDrive:\file.txt -Value 'I am a file.' 'TestDrive:\file.txt' | Should Contain 'I Am' # Test will pass 'TestDrive:\file.txt' | Should Contain '^I.*file$' # Test will pass 'TestDrive:\file.txt' | Should Contain 'I Am Not' # Test will fail Tip: Use [regex]::Escape("pattern") to match the exact text. Set-Content -Path TestDrive:\file.txt -Value 'I am a file.' 'TestDrive:\file.txt' | Should Contain 'I.am.a.file' # Test will pass 'TestDrive:\file.txt' | Should Contain ([regex]::Escape('I.am.a.file')) # Test will fail ContainExactly Checks to see if a file contains the specified text. This search is cas e sensitive and uses regular expressions to match the text. Set-Content -Path TestDrive:\file.txt -Value 'I am a file.' 'TestDrive:\file.txt' | Should Contain 'I am' # Test will pass
'TestDrive:\file.txt' | Should Contain 'I Am' # Test will fail
Match Uses a regular expression to compare two objects. This compariso n is not case sensitive. "I am a value" | Should Match "I Am" # Test will pass "I am a value" | Should Match "I am a bad person" # Test will fail Tip: Use [regex]::Escape("pattern") to match the exact text. "Greg" | Should Match ".reg" # Test will pass "Greg" | Should Match ([regex]::Escape(".reg")) # Test will fail MatchExactly Uses a regular expression to compare two objects. This comparison is ca se sensitive. "I am a value" | Should MatchExactly "I am" # Test will pass "I am a value" | Should MatchExactly "I Am" # Test will fail Throw Checks if an exception was thrown in the input ScriptBlock. { { { {
foo } | Should Throw # Test will pass
$foo = 1 } | Should Throw # Test will fail foo } | Should Not Throw # Test will fail $foo = 1 } | Should Not Throw # Test will pass
Warning: The input object must be a ScriptBlock, otherwise it is process
ed outside of the assertion. Get-Process -Name "process" -ErrorAction Stop | Should Throw # Should pa ss, but the exception thrown by Get-Process causes the test to fail. BeNullOrEmpty Checks values for null or empty (strings). The static [String]::IsNullOr Empty() method is used to do the comparison. $null $null @() ""
| | | |
Should Should Should Should
BeNullOrEmpty # Test will pass
Not BeNullOrEmpty # Test will fail BeNullOrEmpty # Test will pass BeNullOrEmpty # Test will pass
USING SHOULD IN A TEST
function Add-Numbers($a, $b) { return $a + $b } Describe "Add-Numbers" { It "adds positive numbers" { $sum = Add-Numbers 2 3 $sum | should be 3 } } This test will fail since 3 will not be equal to the sum of 2 and 3.