Table of contents Introduction Release History What's New With 6.2.1 What's New With 6.2.0 What's New With 6.1.0 What's New With 6.0.1 What's New With 6.0.0 About This Book Author Getting Started Overview Installation IDE Tools MXUnit Compatibility Writing Tests Running Tests BoxLang CLI Runner CommandBox Runner Web Runner Bundle(s) Runner Directory Runner ANT Runner NodeJS Runner Global Runner Test Browser BDD Tests Bundles: Group Your Tests Suites: Describe Your Tests Dynamic Suites Specs Expectations Suite Groups Given-When-Then Blocks Life-Cycle Methods Life-Cycle Data Binding Specs and Suite Labels Skipping Specs and Suites Focused Specs and Suites Spies & Mocking Asynchronous Testing Running Tests Reporters xUnit Tests Test Bundles Life-Cycle Methods Test Methods Assertions Test and Suite Labels Skipping Tests and Suites Spies and Mocking Asynchronous-Testing Running Tests Reporters Digging Deeper Life-Cycle Annotations Assertions Custom Assertions Expectations Matchers Not Operator Expecting Exceptions Custom Matchers Output Utilities Runner Listeners Reporters Custom Reporters Modules Code Coverage Running Code Coverage Configuring Code Coverage Known Behaviors Continous Integration Github Actions Gitlab Travis Mocking MockBox What is Mocking? Our Approach and Benefits Creating MockBox Creating a Mock Object Creating a Stub Object Mocking Methods $() Method $args() Method $getProperty() Method $property() Method $querySim() Method $results() Method $spy() $throws() Method Verification Methods $count() $times() or $verifyCallCount() $never() $atLeast() $once() $atMost() $callLog() $reset() $debug() Some Examples Conclusion Mocking Data