Summary Introduction Introduction What's New With 2.6.0 What's New With 2.5.0 What's New With 2.4.0 What's New With 2.3.0 What's New With 2.2.0 What's New With 2.1.0 About This Book Author Overview RefCards IDE Tools System Requirements Installing TestBox What's Included Primers TestBox BDD Primer Ref Card Requirements Bundles: Group Your Tests Suites: Describe Your Tests Dynamic Suites Specs Expectations Suite Groups Life-Cycle Methods Specs and Suite Labels Skipping Specs and Suites Spies & Mocking Asynchronous Testing Running Tests Reporters TestBox xUnit Primer RefCard Requirements Bundles: Group Your Tests Test Methods Assertions Setup and Teardown Test and Suite Labels Skipping Tests and Suites Spies and Mocking Asynchronous-Testing Running Tests Reporters In-Depth Testing Styles Test Bundles Optional Inheritance Injected Variables Injected Methods Life-Cycle Methods xUnit BDD Annotations Suites, Tests & Specs (Oh My!) xUnit BDD Assertions Custom Assertions Expectations Matchers Not Operator Expecting Exceptions Custom Matchers Output Utilities Running Tests Run Listeners Global Runner Test Browser Bundle(s) Runner Test Runner Directory Runner SOAP Runner HTTP REST Runner ANT Runner NodeJS Runner Reporters Custom Reporters MXUnit Compatibility Mocking MockBox System Requirements Installing Mockbox What is Mocking? Our Approach and Benefits Creating MockBox Creating a Mock Object Creating a Stub Object Mocking Methods $() Method $property() Method $getProperty() Method $results() Method $args() Method $throws() Method $querySim() Method Verification Methods $count() $times() or $verifyCallCount() $never() $atLeast() $once() $atMost() $callLog() $reset() $debug() Some Examples Conclusion Continuous Integration Introduction Gitlab Travis Jenkins