Pester is the ubiquitous test and mock framework for PowerShell.

License: Other

Language: PowerShell

Keywords: assertions, bdd, bdd-framework, mock, mocking, pester-tests, powershell, powershell-tests, tdd, tdd-framework, testing


📦🔐 Pester is now signed. -SkipPublisherCheck should no longer be used to install from PowerShell Gallery on Windows 10.

👩👨 We are looking for contributors! All issues labeled help wanted are up for grabs. They further split up into good first issue that are issues I hope are easy to solve. Bad first issue where I expect the implementation to be problematic or needs to be proposed and discussed beforehand. And the rest which is somewhere in the middle. If you decide to pick up an issue please comment in the issue thread so others don't waste their time working on the same issue as you. There is also contributor's guide that will hopefully help you.

Pester is the ubiquitous test and mock framework for PowerShell.

# your function
function Get-Planet ([string]$Name='*')
  $planets = @(
    @{ Name = 'Mercury' }
    @{ Name = 'Venus'   }
    @{ Name = 'Earth'   }
    @{ Name = 'Mars'    }
    @{ Name = 'Jupiter' }
    @{ Name = 'Saturn'  }
    @{ Name = 'Uranus'  }
    @{ Name = 'Neptune' }
  ) | foreach { [PSCustomObject]$_ }

  $planets | where { $_.Name -like $Name }

# Pester tests
Describe 'Get-Planet' {
  It "Given no parameters, it lists all 8 planets" {
    $allPlanets = Get-Planet
    $allPlanets.Count | Should -Be 8

  Context "Filtering by Name" {
    It "Given valid -Name '<Filter>', it returns '<Expected>'" -TestCases @(
      @{ Filter = 'Earth'; Expected = 'Earth' }
      @{ Filter = 'ne*'  ; Expected = 'Neptune' }
      @{ Filter = 'ur*'  ; Expected = 'Uranus' }
      @{ Filter = 'm*'   ; Expected = 'Mercury', 'Mars' }
    ) {
      param ($Filter, $Expected)

      $planets = Get-Planet -Name $Filter
      $planets.Name | Should -Be $Expected

    It "Given invalid parameter -Name 'Alpha Centauri', it returns `$null" {
      $planets = Get-Planet -Name 'Alpha Centauri'
      $planets | Should -Be $null

This code example lies a tiny bit, find it annotated and production ready here.

Learn more about the usage and syntax on our wiki.


Pester is compatible with Windows PowerShell 2.x - 5.x on Windows 10, 8, 7, Vista and even 2003. Since version 4.0.9 Pester is compatible also with PowerShell Core 6.x on Windows, Linux, macOS but with some limitations.

Pester comes pre-installed with Windows 10, but we recommend updating, by running this PowerShell command as administrator:

Install-Module -Name Pester -Force

Not running Windows 10 or facing problems? See the full installation and update guide.


Test runner

Pester runs your tests and prints a nicely formatted output to the screen.

test run output

Command line output is not the only output option, Pester also integrates with Visual Studio Code, Visual Studio, and any tool that can consume nUnit XML output.


Pester comes with a suite of assertions that cover a lot of common use cases. Pester assertions range from very versatile, like Should -Be, to specialized like Should -Exists. Here is how you ensure that a file exists:

Describe 'Notepad' {
    It 'Exists in Windows folder' {
        'C:\Windows\notepad.exe' | Should -Exist

Learn more about assertion on our wiki.


Pester has mocking built-in. Using mocks you can easily replace functions with empty implementation to avoid changing the real environment.

function Remove-Cache {
    Remove-Item "$env:TEMP\cache.txt"

Describe 'Remove-Cache' {
    It 'Removes cached results from temp\cache.text' {
        Mock -CommandName Remove-Item -MockWith {}


        Assert-MockCalled -CommandName Remove-Item -Times 1 -Exactly

Learn more about Mocking here.

Code coverage

Pester can measure how much of your code is covered by tests and export it to JaCoCo format that is easily understood by build servers.

JaCoCo code coverage report

Learn more about code coverage here.

Build server integration

Pester integrates nicely with TFS, AppVeyor, TeamCity, Jenkins and other CI servers.

Testing your scripts, and all pull requests on AppVeyor is extremely simple. Just commit this appveyor.yml file to your repository, and select your repository on the AppVeyor website:

version: 1.0.{build}
  - Visual Studio 2017
  - Ubuntu
  - ps: Install-Module Pester -Force -Scope CurrentUser
build: off
  - ps: Invoke-Pester -EnableExit

See it in action here! If you do not need to test your scripts against PowerShell Core, just simply remove the entire line mentioning Ubuntu.

Pester itself is built on the community build server and Travis CI, and distributed mainly via PowerShell gallery.

PowerShell 2 & 3 PowerShell 4, 5 & Core on Windows build Linux & MacOS build latest version downloads

Further reading

Do you like what you see? Learn how to use Pester with our wiki guide, and continue with some of the other resources.

Got questions?

Got questions or you just want to get in touch? Use our issues page or one of these channels:

Pester Twitter Pester on StackOverflow Testing channel on Powershell Slack Pester Gitter Pester on

Sponsored by

Pester is sponsored by all the great folks on OpenCollective, GitHub and by the

The DevOps Collective

Project Statistics

Sourcerank 12
Repository Size 15.8 MB
Stars 1,934
Forks 372
Watchers 186
Open issues 132
Dependencies 0
Contributors 111
Tags 93
Last updated
Last pushed

Top Contributors See all

Dave Wyatt Jakub Jareš Joel Bennett Scott Muc Matt Wrock Wojciech Sciesinski June Blender PetSerAl Max Bergmann Rene Hernandez Brant Bobby James Truher [MSFT] Sergey Vasin Craig E. Shea Adam Bertram Martin Suchanek cgnuechtel Manoj Thomas Démoulins Michael Clayton

Packages Referencing this Repo

Pester provides a framework for running BDD style Tests to execute and validate PowerShell comman...
Latest release 4.9.0 - Updated - 1.93K stars
Pester provides a framework for running BDD style Tests to execute and validate PowerShell comman...
Latest release 4.2.0-alpha3 - Updated - 1.93K stars

Recent Tags See all

4.9.0 September 08, 2019
5.0.0-alpha4 May 26, 2019
4.8.1 May 11, 2019
4.8.0 May 01, 2019
5.0.0-alpha3 March 23, 2019
4.7.3 March 23, 2019
4.7.2 March 08, 2019
4.7.1 March 05, 2019
4.7.0 March 03, 2019
4.7.0-beta1 February 22, 2019
4.6.0 January 21, 2019
5.0.0-alpha2 January 19, 2019
5.0.0-alpha1 January 11, 2019
4.5.0 January 10, 2019
4.5.0-beta2 January 05, 2019

Interesting Forks See all

Powershell BDD style testing framework
PowerShell - Updated - 1 stars
Powershell BDD style testing framework
PowerShell - Published - 1 stars
Powershell BDD style testing framework
PowerShell - Last pushed - 1 stars

Something wrong with this page? Make a suggestion

Last synced: 2019-05-11 14:19:09 UTC

Login to resync this repository