Table of contents : About the Author Foreword Feedback Code Samples Introduction Testing as Institutional Memory Testing Drives Better Modularization Tests as Functional Specifications Tests in Automated Build Pipelines Where We’re Not Going Resources Part I - Pester Concepts Block Introduction Describe Blocks Context Blocks It Blocks Before and After Blocks Summary TestDrive and TestRegistry Using TestDrive Using TestRegistry Summary Assertions Using the Should Assertion Understanding Should Operators Testing Collections Other Tests Testing Errors Adding Custom Assertion Operators Because Summary Test Cases Creating Tests for Different Parameters Using the TestCases Parameter Using the Test Name Token Summary Mocking Introduction Mock Walkthrough Mock Assertions Summary Code Coverage Why Code Coverage? Using Pester to Measure Code Coverage Getting Granular with Code Coverage Summary Gherkin Files Features Scenarios Steps Step Definitions Running Gherkin Tests Summary Part 2: Using Pester Controlling Test Results Pending and Skipped States Forcing Pass/Fail States Summary Working with Pester Output nUnit XML Returning Failed Tests as Exit Codes Summary Tagging Introduction to Tagging Tagging Strategies Summary Modules and Dot-Sourced Script Gotchas Scripts with Functions Modules Summary Advanced Mocking Mocking Specific Object Types Mock Scope Module-Level Mocks Parameter Filters Summary Mocking the Unmockable .NET Methods Creating Wrapper Functions “Overwriting” .NET Methods with a ScriptMethod Using “Stubbed” Commands Asserting Mocks “Transitively” Summary Improving Code Coverage Step #1: Getting a Baseline Step #2: Build the Test Framework Step #3: Create the Mocks Step #4: Know the “Before” Code Coverage Step #5: Build all Tests Step #6: Re-check Code Coverage Summary Infrastructure Testing Analyzing the Code Getting Testing Dependencies in Place Prototyping the Infrastructure Tests Assessing the Current Environment Writing the Infrastructure Tests Dependencies Operational Validation Framework (OVF) Summary Troubleshooting and Debugging Sending Variables to the Console with Write-Host Using Debugger Breakpoints During Tests Summary Test Walkthrough #1 Analyzing the Code Refactoring Deciding What to Test Find the Shortest Code Path Creating Test(s) for the Shortest Code Path Building Tests for Other Code Paths Summary Test Walkthrough #2 Understand the Subject Designing Tests Writing the Tests ImportVariables Parameter ImportModules Parameter RunspaceTimeout Parameter Parameter parameter Summary Part 3: Hands-On Design and Testing Buildling Testable Code Modularization Limit Function Input Input Via Parameters Managing Output Properly Summary Test Design Practices Ensuring Code “State” Doesn’t Change The Input/Execution/Output Pattern Choosing When to Create Describe Blocks Naming Conventions Summary Part 4: Pester Cookbook Recipe: Testing for Live Conditions Recipe: Testing for Installed Software Recipe: Ensuring all Functions in a Module Have Tests Recipe: Testing External Applications The Background Testing Exit Codes from Standalone EXE files Recipe: Testing Syntax Recipe: Testing Remote Script Blocks Resources Video Courses Articles