Test-Driven Development with C++: A simple guide to writing bug-free Agile code

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Learn how to write a simple testing framework and extend it to drive the design of your logging library

Key Features

  • Learn how to solve various challenges when testing in C++ with the help of effective solutions
  • Develop a logging library with enhancements
  • Drive better code designs with effective tests

Book Description

Modern, standard C++ is all that is needed to create a small and practical testing framework that will improve the design of any project. This allows you to think about how the code will be used, which is the first step in designing intuitive interfaces. TDD is a modern balanced software development approach that helps to create maintainable applications, provide modularity in design, and write minimal code that drastically reduces defects. With the help of this book, you'll be able to continue adding value when designs need to change by ensuring that the changes don't break existing tests.

In this book, developers working with test-driven development (TDD) will be able to put their knowledge to work by writing a simple testing framework and then using it to drive the design of a logging library. The book will help you enhance your software development skills with test cases. You'll understand how to design and implement test cases. The chapters will also show you how to utilize the TDD approach to be more productive in software development than attempting to code in large unstructured steps.

By the end of this book, you'll have gained knowledge of TDD and testing and also built a working logging library.

What you will learn

  • Understand how to develop software using TDD
  • Keep the code for the system as error-free as possible
  • Refactor and redesign code confidently
  • Communicate the requirements and behaviors of the code with your team
  • Understand the differences between unit tests and integration tests
  • Use TDD to create a minimal viable testing framework

Who this book is for

This book is for C++ developers already familiar with and using C++ for daily tasks who want to improve their skillset. You don't need to be an expert but you should already have some knowledge of modern C++ and how to use templates to get the most out of this book.

Table of Contents

  1. Desired Test Declaration
  2. Test Results
  3. The TDD process
  4. Adding Tests to a Project
  5. Adding More Confirm Types
  6. Explore Improvements Early
  7. Test Setup and Teardown
  8. What Makes a Good Test?
  9. Using Tests
  10. The TDD Process In Depth
  11. Managing Dependencies
  12. Creating Better Test Confirmations
  13. How to Test Floating-Point and Custom Values
  14. How to Test Services
  15. How to Test With Multiple Threads

Author(s): Abdul Wahid Tanner
Edition: 1
Publisher: Packt Publishing
Year: 2022

Language: English
Pages: 430
City: Birmingham
Tags: Test-Driven Development; TDD; C++; Stubs; Mocks; Multi-Threading Testing; Multiple Threads Testing

Cover
Title Page
Copyright and Credits
Contributors
About the reviewer
Table of Contents
Preface
Part 1: Testing MVP
Chapter 1: Desired Test Declaration
Technical requirements
What do we want tests to do for us?
What should a test look like?
What information does a test need?
How can we use C++ to write tests?
How will the first test be used?
Summary
Chapter 2: Test Results
Technical requirements
Reporting a single test result
Enhancing the test declaration to support multiple tests
Summarizing the results
Redirecting the output results
Summary
Chapter 3: The TDD Process
Technical requirements
Build failures come first
Do only what is needed to pass
Enhancing a test and getting another pass
Summary
Chapter 4: Adding Tests to a Project
Technical requirements
How to detect whether a test passes or fails
Enhancing the testing library to support assertions
Should error cases be tested, too?
Summary
Chapter 5: Adding More Confirm Types
Technical requirements
Fixing the bool confirms
Confirming equality
Decoupling test failures from line numbers
Adding more confirm types
Confirming string literals
Confirming floating point values
How to write confirms
Summary
Chapter 6: Explore Improvements Early
Technical requirements
Getting line numbers without macros
Exploring lambdas for tests
Summary
Chapter 7: Test Setup and Teardown
Technical requirements
Supporting test setup and teardown
Enhancing test setup and teardown for multiple tests
Handling errors in setup and teardown
Summary
Chapter 8: What Makes a Good Test?
Technical requirements
Making tests easy to understand
Keeping tests focused on specific scenarios
Use random behavior only in this way
Only test your project
Test what should happen instead of how
Summary
Part 2: Using TDD to Create a Logging Library
Chapter 9: Using Tests
Technical requirements
Why build a logging library?
How will TDD help build a logging library?
What would the ideal logging library look like?
Starting a project using TDD
Logging and confirming the first message
Adding timestamps
Constructing log messages with streams
Summary
Chapter 10: The TDD Process in Depth
Technical requirements
Finding gaps in the testing
Adding log levels
Adding default tag values
Exploring filtering options
Adding new tag types
Refactoring the tag design with TDD
Designing tests to filter log messages
Controlling what gets logged
Enhancing filtering for relative matches
When is testing too much?
How intrusive should tests be?
Where do integration or system tests go in TDD?
What about other types of tests?
Summary
Chapter 11: Managing Dependencies
Technical requirements
Designing with dependencies
Adding multiple logging outputs
Summary
Part 3: Extending the TDD Library to Support the Growing Needs of the Logging Library
Chapter 12: Creating Better Test Confirmations
Technical requirements
The problem with the current confirmations
Simplifying string confirmations
Enhancing the test library to support Hamcrest matchers
Adding more Hamcrest types
Summary
Chapter 13: How to Test Floating-Point and Custom Values
Technical requirements
More precise floating-point comparisons
Adding floating-point Hamcrest matchers
Writing custom Hamcrest matchers
Summary
Chapter 14: How to Test Services
Technical requirements
Service testing challenges
What can be tested in a service?
Introducing the SimpleService project
Summary
Chapter 15: How to Test With Multiple Threads
Technical requirements
Using multiple threads in tests
Making the logging library thread-safe
The need to justify multiple threads
Changing the service return type
Making multiple service calls
How to test multiple threads without sleep
Fixing one last problem detected with logging
Summary
Index
Other Books You May Enjoy