Home>Store

Growing Object-Oriented Software, Guided by Tests

Register your productto gain access to bonus material or receive a coupon.

Growing Object-Oriented Software, Guided by Tests

Best Value Purchase

Book + eBook Bundle

  • Your Price: $64.79
  • List Price: $107.98
  • Includes EPUB and PDF
  • About eBook Formats
  • This eBook includes the following formats, accessible from yourAccountpage after purchase:

    ePubEPUBThe open industry format known for its reflowable content and usability on supported mobile devices.

    Adobe ReaderPDFThe popular standard, used most often with the freeAdobe® Reader®software.

    This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

More Purchase Options

Book

  • Your Price: $47.99
  • List Price: $59.99
  • Usually ships in 24 hours.

eBook (Watermarked)

  • Your Price: $38.39
  • List Price: $47.99
  • Includes EPUB and PDF
  • About eBook Formats
  • This eBook includes the following formats, accessible from yourAccountpage after purchase:

    ePubEPUBThe open industry format known for its reflowable content and usability on supported mobile devices.

    Adobe ReaderPDFThe popular standard, used most often with the freeAdobe® Reader®software.

    This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.

Description

  • Copyright 2010
  • Dimensions: 7" x 9-1/4"
  • Pages: 384
  • Edition: 1st
  • Book
  • ISBN-10: 0-321-50362-7
  • ISBN-13: 978-0-321-50362-6

Foreword by Kent Beck

"The authors of this book have led a revolution in the craft of programming by controlling the environment in which software grows.”--Ward Cunningham

“At last, a book suffused with code that exposes the deep symbiosis between TDD and OOD. This one's a keeper.”--Robert C. Martin

“If you want to be an expert in the state of the art in TDD, you need to understand the ideas in this book.”--Michael Feathers

Test-Driven Development (TDD) is now an established technique for delivering better software faster. TDD is based on a simple idea: Write tests for your code before you write the code itself. However, this "simple" idea takes skill and judgment to do well. Now there's a practical guide to TDD that takes you beyond the basic concepts. Drawing on a decade of experience building real-world systems, two TDD pioneers show how to let tests guide your development and “grow” software that is coherent, reliable, and maintainable.

Steve Freeman and Nat Pryce describe the processes they use, the design principles they strive to achieve, and some of the tools that help them get the job done. Through an extended worked example, you’ll learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects. Along the way, the book systematically addresses challenges that development teams encounter with TDD--from integrating TDD into your processes to testing your most difficult features. Coverage includes

• Implementing TDD effectively: getting started, and maintaining your momentum

throughout the project

• Creating cleaner, more expressive, more sustainable code

• Using tests to stay relentlessly focused on sustaining quality

• Understanding how TDD, Mock Objects, and Object-Oriented Design come together

in the context of a real software development project

• Using Mock Objects to guide object-oriented designs

• Succeeding where TDD is difficult: managing complex test data, and testing persistence

和concurrency

样本Content

Online Sample Chapter

Test-Driven Development with Objects

样本Pages

Download the sample pages(includes Chapter 2 and Index)

Table of Contents

Foreword xv

Preface xvii

Acknowledgments xxi

About the Authors xxiii

PART I: INTRODUCTION 1

Chapter 1: What Is the Point of Test-Driven Development? 3

Software Development as a Learning Process 3

Feedback Is the Fundamental Tool 4

Practices That Support Change 5

Test-Driven Development in a Nutshell 6

The Bigger Picture 7

Testing End-to-End 8

Levels of Testing 9

External and Internal Quality 10

Chapter 2: Test-Driven Development with Objects 13

A Web of Objects 13

Values and Objects 13

Follow the Messages 14

Tell, Don’t Ask 17

But Sometimes Ask 17

Unit-Testing the Collaborating Objects 18

Support for TDD with Mock 19

Chapter 3: An Introduction to the Tools 21

Stop Me If You’ve Heard This One Before 21

A Minimal Introduction to JUnit 4 21

Hamcrest Matchers and assertThat() 24

jMock2: Mock Objects 25

PART II: THE PROCESS OF TEST-DRIVEN DEVELOPMENT 29

Chapter 4: Kick-Starting the Test-Driven Cycle 31

Introduction 31

First, Test a Walking Skeleton 32

Deciding the Shape of the Walking Skeleton 33

Build Sources of Feedback 35

Expose Uncertainty Early 36

Chapter 5: Maintaining the Test-Driven Cycle 39

Introduction 39

Start Each Feature with an Acceptance Test 39

Separate Tests That Measure Progress from Those That Catch Regressions 40

Start Testing with the Simplest Success Case 41

Write the Test That You’d Want to Read 42

Watch the Test Fail 42

Develop from the Inputs to the Outputs 43

Unit-Test Behavior, Not Methods 43

Listen to the Tests 44

Tuning the Cycle 45

Chapter 6: Object-Oriented Style 47

Introduction 47

Designing for Maintainability 47

Internals vs. Peers 50

No And’s, Or’s, or But’s 51

Object Peer Stereotypes 52

Composite Simpler Than the Sum of Its Parts 53

Context Independence 54

Hiding the Right Information 55

An Opinionated View 56

Chapter 7: Achieving Object-Oriented Design 57

How Writing a Test First Helps the Design 57

Communication over Classification 58

Value Types 59

Where Do Objects Come From? 60

Identify Relationships with Interfaces 63

Refactor Interfaces Too 63

Compose Objects to Describe System Behavior 64

Building Up to Higher-Level Programming 65

And What about Classes? 67

Chapter 8: Building on Third-Party Code 69

Introduction 69

Only Mock Types That You Own 69

Mock Application Objects in Integration Tests 71

PART III: A WORKED EXAMPLE 73

Chapter 9: Commissioning an Auction Sniper 75

To Begin at the Beginning 75

Communicating with an Auction 78

Getting There Safely 79

This Isn’t Real 81

Chapter 10: The Walking Skeleton 83

Get the Skeleton out of the Closet 83

Our Very First Test 84

Some Initial Choices 86

Chapter 11: Passing the First Test 89

Building the Test Rig 89

Failing and Passing the Test 95

The Necessary Minimum 102

Chapter 12: Getting Ready to Bid 105

An Introduction to the Market 105

A Test for Bidding 106

The AuctionMessageTranslator 112

Unpacking a Price Message 118

Finish the Job 121

Chapter 13: The Sniper Makes a Bid 123

Introducing AuctionSniper 123

Sending a Bid 126

Tidying Up the Implementation 131

Defer Decisions 136

Emergent Design 137

Chapter 14: The Sniper Wins the Auction 139

First, a Failing Test 139

Who Knows about Bidders? 140

The Sniper Has More to Say 143

The Sniper Acquires Some State 144

The Sniper Wins 146

Making Steady Progress 148

Chapter 15: Towards a Real User Interface 149

A More Realistic Implementation 149

Displaying Price Details 152

Simplifying Sniper Events 159

Follow Through 164

Final Polish 168

Observations 171

Chapter 16: Sniping for Multiple Items 175

Testing for Multiple Items 175

Adding Items through the User Interface 183

Observations 189

Chapter 17: Teasing Apart Main 191

Finding a Role 191

Extracting the Chat 192

Extracting the Connection 195

Extracting the SnipersTableModel 197

Observations 201

Chapter 18: Filling In the Details 205

A More Useful Application 205

Stop When We’ve Had Enough 205

观察212年

第十九章:215年处理故障

What If It Doesn’t Work? 215

Detecting the Failure 217

Displaying the Failure 218

Disconnecting the Sniper 219

Recording the Failure 221

Observations 225

PART IV: SUSTAINABLE TEST-DRIVEN DEVELOPMENT 227

Chapter 20: Listening to the Tests 229

Introduction 229

I Need to Mock an Object I Can’t Replace (without Magic) 230

Logging Is a Feature 233

Mocking Concrete Classes 235

Don’t Mock Values 237

Bloated Constructor 238

Confused Object 240

Too Many Dependencies 241

Too Many Expectations 242

What the Tests Will Tell Us (If We’re Listening) 244

Chapter 21: Test Readability 247

Introduction 247

Test Names Describe Features 248

Canonical Test Structure 251

Streamline the Test Code 252

Assertions and Expectations 254

Literals and Variables 255

Chapter 22: Constructing Complex Test Data 257

Introduction 257

Test Data Builders 258

Creating Similar Objects 259

Combining Builders 261

Emphasizing the Domain Model with Factory Methods 261

Removing Duplication at the Point of Use 262

Communication First 264

Chapter 23: Test Diagnostics 267

Design to Fail 267

Small, Focused, Well-Named Tests 268

Explanatory Assertion Messages 268

Highlight Detail with Matchers 268

Self-Describing Value 269

Obviously Canned Value 270

Tracer Object 270

Explicitly Assert That Expectations Were Satisfied 271

Diagnostics Are a First-Class Feature 271

Chapter 24: Test Flexibility 273

Introduction 273

Test for Information, Not Representation 274

Precise Assertions 275

Precise Expectations 277

“Guinea Pig” Objects 284

PART V: ADVANCED TOPICS 287

Chapter 25: Testing Persistence 289

Introduction 289

Isolate Tests That Affect Persistent State 290

Make Tests Transaction Boundaries Explicit 292

Testing an Object That Performs Persistence Operations 294

Testing That Objects Can Be Persisted 297

But Database Tests Are S-l-o-w! 300

Chapter 26: Unit Testing and Threads 301

Introduction 301

Separating Functionality and Concurrency Policy 302

Unit-Testing Synchronization 306

Stress-Testing Passive Objects 311

Synchronizing the Test Thread with Background Threads 312

The Limitations of Unit Stress Tests 313

Chapter 27: Testing Asynchronous Code 315

Introduction 315

Sampling or Listening 316

Two Implementations 318

Runaway Tests 322

Lost Updates 323

Testing That an Action Has No Effect 325

Distinguish Synchronizations and Assertions 326

Externalize Event Sources 326

Afterword: A Brief History of Mock Objects 329

Appendix A: jMock2 Cheat Sheet 335

Appendix B: Writing a Hamcrest Matcher 343

Bibliography 347

Index 349

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simplyemailinformation@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through ourContact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on theAccount page. If a user no longer desires our service and desires to delete his or her account, please contact us atcustomer-service@informit.comand we will process the deletion of a user's account.

Choice/Opt-out


用户总是可以做一个知情的选择时ther they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive:www.e-skidka.com/u.aspx.

Sale of Personal Information


皮尔森并不出租或出售个人信息in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information toNevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read ourSupplemental privacy statement for California residentsin conjunction with this Privacy Notice. TheSupplemental privacy statement for California residentsexplains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Pleasecontact usabout this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020