Bird
Raised Fist0
PowerShellscripting~20 mins

Pester testing framework basics in PowerShell - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Pester Pro
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this Pester test block?
Consider this Pester test script:
Describe 'Math tests' {
  It 'adds numbers correctly' {
    (2 + 3) | Should -Be 5
  }
  It 'multiplies numbers correctly' {
    (4 * 2) | Should -Be 8
  }
}

What will Pester report after running this script?
PowerShell
Describe 'Math tests' {
  It 'adds numbers correctly' {
    (2 + 3) | Should -Be 5
  }
  It 'multiplies numbers correctly' {
    (4 * 2) | Should -Be 8
  }
}
A2 tests, 2 passed, 0 failed
B2 tests, 1 passed, 1 failed
C1 test, 1 passed, 0 failed
D0 tests run
Attempts:
2 left
💡 Hint
Both math operations are correct, so both tests should pass.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in this Pester test
Look at this Pester test code:
Describe 'String tests' {
  It 'checks string length' {
    'hello'.Length | Should -Be 5
  }
  It 'checks string content' 
    'hello' | Should -Be 'hello'
}

Which option correctly describes the syntax error?
PowerShell
Describe 'String tests' {
  It 'checks string length' {
    'hello'.Length | Should -Be 5
  }
  It 'checks string content' 
    'hello' | Should -Be 'hello'
}
AShould command is misspelled
BMissing closing brace '}' after first It block
CMissing opening brace '{' after second It block
DDescribe block is missing parentheses
Attempts:
2 left
💡 Hint
Each It block must have braces enclosing its code.
🔧 Debug
advanced
2:00remaining
Why does this Pester test fail unexpectedly?
Given this Pester test:
$value = 10
Describe 'Value tests' {
  It 'checks if value is greater than 5' {
    $value -gt 5 | Should -Be $true
  }
  It 'checks if value is less than 20' {
    $value -lt 20 | Should -Be $false
  }
}

Why does the second test fail?
PowerShell
$value = 10
Describe 'Value tests' {
  It 'checks if value is greater than 5' {
    $value -gt 5 | Should -Be $true
  }
  It 'checks if value is less than 20' {
    $value -lt 20 | Should -Be $false
  }
}
AThe variable $value is not accessible inside the Describe block
BThe second test expects $false but the condition is true
CThe Should command is used incorrectly with -Be
DThe first test modifies $value causing the second to fail
Attempts:
2 left
💡 Hint
Check the logic of the condition and the expected value in the second test.
🚀 Application
advanced
2:00remaining
How to test a function output with Pester?
You have this PowerShell function:
function Get-Greeting {
  param([string]$Name)
  "Hello, $Name!"
}

Which Pester test block correctly verifies that calling Get-Greeting with 'Alice' returns 'Hello, Alice!'?
PowerShell
function Get-Greeting {
  param([string]$Name)
  "Hello, $Name!"
}

Describe 'Get-Greeting function' {
  It 'returns correct greeting for Alice' {
    # Fill in the test here
  }
}
AGet-Greeting -Name 'Alice' | Should -Be 'Hello, Alice!'
B"Hello, Alice!" | Should -Be (Get-Greeting -Name 'Alice')
CGet-Greeting 'Alice' | Should -Be 'Hello, Alice!'
DGet-Greeting -Name Alice | Should -Be 'Hello Alice!'
Attempts:
2 left
💡 Hint
Use the function call on the left side of the Should command and the expected string on the right.
🧠 Conceptual
expert
2:00remaining
What is the purpose of the 'BeforeAll' block in Pester?
In Pester testing, what does the 'BeforeAll' block do compared to 'BeforeEach'?
A'BeforeAll' and 'BeforeEach' are interchangeable and run before each test
B'BeforeAll' runs before every It block; 'BeforeEach' runs once before all tests
C'BeforeAll' runs after all tests; 'BeforeEach' runs before all tests
D'BeforeAll' runs once before all tests in a Describe block; 'BeforeEach' runs before every It block
Attempts:
2 left
💡 Hint
Think about setup code that should run once versus before every test.

Practice

(1/5)
1. What is the main purpose of the Describe block in a Pester test script?
easy
A. To check if a value matches an expectation
B. To run the tests automatically
C. To define variables for the tests
D. To group related tests together

Solution

  1. Step 1: Understand the role of Describe block

    The Describe block is used to group related tests in Pester, making the test script organized and readable.
  2. Step 2: Differentiate from other blocks

    It blocks contain individual tests, and Should is used for assertions, not grouping.
  3. Final Answer:

    To group related tests together -> Option D
  4. Quick Check:

    Describe groups tests = C [OK]
Hint: Describe groups tests; It contains tests; Should checks results [OK]
Common Mistakes:
  • Confusing Describe with It blocks
  • Thinking Should groups tests
  • Assuming Describe runs tests automatically
2. Which of the following is the correct syntax to write a simple test in Pester that checks if the number 5 is greater than 3?
easy
A. Test 'Test' { Check 'checks number' { 5 > 3 ShouldBe True } }
B. Describe 'Test' { It 'checks number' { Should 5 -gt 3 } }
C. Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } }
D. It 'checks number' { 5 -gt 3 ShouldBe $true }

Solution

  1. Step 1: Identify correct Pester syntax

    The correct syntax uses Describe to group, It for the test, and pipes the condition to Should Be $true.
  2. Step 2: Check each option

    Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } } correctly uses Describe, It, and pipes the boolean expression to Should Be $true. Others have syntax errors or wrong keywords.
  3. Final Answer:

    Describe 'Test' { It 'checks number' { 5 -gt 3 | Should Be $true } } -> Option C
  4. Quick Check:

    Correct syntax uses Describe, It, and Should Be [OK]
Hint: Use Describe and It blocks; pipe condition to Should Be [OK]
Common Mistakes:
  • Using wrong keywords like Test or Check
  • Missing pipe before Should
  • Incorrect comparison operators
3. What will be the output when running this Pester test script?
Describe 'Math Tests' {
  It 'checks addition' {
    (2 + 2) | Should Be 4
  }
  It 'checks subtraction' {
    (5 - 3) | Should Be 1
  }
}
medium
A. One test fails because 5 - 3 is not 1
B. Both tests pass successfully
C. Syntax error due to missing parentheses
D. All tests fail because Should Be is used incorrectly

Solution

  1. Step 1: Evaluate each test condition

    The first test checks if 2 + 2 equals 4, which is true. The second test checks if 5 - 3 equals 1, which is false because 5 - 3 equals 2.
  2. Step 2: Determine test results

    Since the second test condition is false, that test fails. The first test passes.
  3. Final Answer:

    One test fails because 5 - 3 is not 1 -> Option A
  4. Quick Check:

    5 - 3 = 2, not 1, so test fails [OK]
Hint: Calculate expressions carefully; check expected values [OK]
Common Mistakes:
  • Assuming 5 - 3 equals 1
  • Ignoring test failure details
  • Thinking Should Be causes syntax errors here
4. You wrote this Pester test but it fails to run:
Describe 'Test' {
  It 'checks value' {
    $result = Get-Value
    $result | Should Be 10
  }
}
What is the most likely reason for the failure?
medium
A. Get-Value is not a recognized command or function
B. Should Be cannot be used with variables
C. It block must not contain variable assignments
D. Describe block requires a parameter

Solution

  1. Step 1: Analyze the test script

    The test calls Get-Value but this command is not standard in PowerShell and likely undefined.
  2. Step 2: Identify cause of failure

    Since Get-Value is missing, the script fails before reaching the assertion. Other options are incorrect because variables and Describe blocks are valid as used.
  3. Final Answer:

    Get-Value is not a recognized command or function -> Option A
  4. Quick Check:

    Undefined commands cause test failures [OK]
Hint: Check if all commands/functions exist before testing [OK]
Common Mistakes:
  • Assuming Should Be can't use variables
  • Thinking Describe needs parameters
  • Believing variable assignment is disallowed in It
5. You want to write a Pester test that checks if a function Get-UserName returns a non-empty string. Which test script correctly achieves this?
hard
A. Describe 'User Tests' { It 'returns non-empty string' { Get-UserName | Should BeNotNullOrEmpty } }
B. Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } }
C. Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Be $true } }
D. Describe 'User Tests' { It 'returns non-empty string' { Get-UserName | Should Not BeNullOrEmptyString } }

Solution

  1. Step 1: Identify correct assertion for non-empty string

    Pester provides Should Not BeNullOrEmpty to check that a value is not null or empty.
  2. Step 2: Check syntax correctness

    Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } } correctly calls Get-UserName in parentheses and pipes the result to Should Not BeNullOrEmpty. Other options use incorrect assertion names or syntax.
  3. Final Answer:

    Describe 'User Tests' { It 'returns non-empty string' { (Get-UserName) | Should Not BeNullOrEmpty } } -> Option B
  4. Quick Check:

    Use Should Not BeNullOrEmpty for non-empty string checks [OK]
Hint: Use Should Not BeNullOrEmpty to check non-empty strings [OK]
Common Mistakes:
  • Using incorrect assertion names like BeNotNullOrEmpty
  • Forgetting parentheses around function call
  • Using Should Be $true for string checks