Video description
In Video Editions the narrator reads the book while the content, figures, code listings, diagrams, and text appear on the screen. Like an audiobook that you can also watch as a video.
"This book is something special. The chapters build on each other to a startling accumulation of depth. Get ready for a treat."
From the Foreword by Robert C. Martin, cleancoder.com
The Art of Unit Testing, Second Edition guides you step by step from writing your first simple tests to developing robust test sets that are maintainable, readable, and trustworthy. You'll master the foundational ideas and quickly move to high-value subjects like mocks, stubs, and isolation, including frameworks such as Moq, FakeItEasy and Typemock Isolator. You'll explore test patterns and organization, working with legacy code, and even "untestable" code. Along the way, you'll learn about integration testing and techniques and tools for testing databases and other technologies.
Inside:- Create readable, maintainable, trustworthy tests
- Fakes, stubs, mock objects, and isolation (mocking) frameworks
- Simple dependency injection techniques
- Refactoring legacy code
The examples in the book use C#, but will benefit anyone using a statically typed language such as Java or C++.
Roy Osherove has been coding for over 15 years, and he consults and trains teams worldwide on the gentle art of unit testing and test-driven development. His blog is at ArtOfUnitTesting.com
The best way to learn unit testing from what is now a classic in the field.
Raphael Faria, LG Electronics
Teaches you the philosophy as well as the nuts and bolts for effective unit testing.
Pradeep Chellappan, Microsoft
When my team members ask me how to write unit tests the right way, I simply answer: Get this book!
Alessandro Campeis, Vimar SpA
The single best resource on unit testing.
Kaleb Pederson, Next IT Corporation
NARRATED BY MARK THOMAS
Table of Contents
PART 1 GETTING STARTED
Chapter 1 - The basics of unit testing
Chapter 1 - Properties of a good unit test
Chapter 1 - Drawbacks of nonautomated integration tests compared to automated unit tests
Chapter 1 - What makes unit tests good
Chapter 1 - Test-driven development
Chapter 1 - The three core skills of successful TDD
Chapter 2 - A first unit test
Chapter 2 - Introducing the LogAn project
Chapter 2 - Loading up the solution
Chapter 2 - Writing your first test
Chapter 2 - Refactoring to parameterized tests
Chapter 2 - More NUnit attributes
Chapter 2 - Checking for expected exceptions
Chapter 2 - Testing results that are system state changes instead of return values
PART 2 CORE TECHNIQUES
Chapter 3 - Using stubs to break dependencies
Chapter 3 - Determining how to easily test LogAnalyzer
Chapter 3 - Refactoring your design to be more testable
Chapter 3 - Dependency injection: inject a fake implementation into a unit under test
Chapter 3 - Simulating exceptions from fakes
Chapter 3 - Variations on refactoring techniques
Chapter 3 - Overcoming the encapsulation problem
Chapter 4 - Interaction testing using mock objects
Chapter 4 - The difference between mocks and stubs
Chapter 4 - A simple handwritten mock example
Chapter 4 - One mock per test
Chapter 4 - The problems with handwritten mocks and stubs
Chapter 5 - Isolation (mocking) frameworks
Chapter 5 - Dynamically creating a fake object
Chapter 5 - Simulating fake values
Chapter 5 - Testing for event-related activities
Chapter 5 - Advantages and traps of isolation frameworks
Chapter 6 - Digging deeper into isolation frameworks
Chapter 6 - How profiler-based unconstrained frameworks work
Chapter 6 - Values of good isolation frameworks
Chapter 6 - Ignored arguments by default
Chapter 6 - Isolation framework design antipatterns
PART 3 THE TEST CODE
Chapter 7 - Test hierarchies and organization
Chapter 7 - Anatomy of a build script
Chapter 7 - Triggering builds and integration
Chapter 7 - Mapping out tests based on speed and type
Chapter 7 - Ensuring tests are part of source control
Chapter 7 - Cross-cutting concerns injection
Chapter 7 - Using test class inheritance patterns
Chapter 7 - Creating test utility classes and methods
Chapter 8 - The pillars of good unit tests
Chapter 8 - Writing trustworthy tests
Chapter 8 - Avoiding logic in tests
Chapter 8 - Testing only one concern
Chapter 8 - Assuring code review with code coverage
Chapter 8 - Writing maintainable tests
Chapter 8 - Removing duplication
Chapter 8 - Enforcing test isolation
Chapter 8 - Avoiding multiple asserts on different concerns
Chapter 8 - Comparing objects
Chapter 8 - Writing readable tests
Chapter 8 - Asserting yourself with meaning
PART 4 DESIGN AND PROCESS
Chapter 9 - Integrating unit testing into the organization
Chapter 9 - Identify possible entry points
Chapter 9 - Ways to succeed
Chapter 9 - Aiming for specific goals
Chapter 9 - Realizing that there will be hurdles
Chapter 9 - Tough questions and answers
Chapter 9 - Why is the QA department still finding bugs?
Chapter 10 - Working with legacy code
Chapter 10 - Writing integration tests before refactoring
Chapter 10 - Important tools for legacy code unit testing
Chapter 10 - Read Michael Feathers’s book on legacy code
Chapter 11 - Design and testability
Chapter 11 - Make classes nonsealed by default
Chapter 11 - Pros and cons of designing for testability
Chapter 11 - Alternatives to designing for testability
Chapter 11 - Example of a hard-to-test design
Chapter 11 - Summary