{"product_id":"professional-test-driven-development-with-c-developing-real-world-applications-with-tdd-paperback-softback-9780470643204","title":"Professional Test Driven Development with C#; Developing Real World Applications with TDD (Paperback \/ softback) 9780470643204","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eProfessional Test Driven Development with C#\u003c\/font\u003e\u003cbr\u003e\r\n\u003cfont size=\"5\"\u003eDeveloping Real World Applications with TDD\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\u003cp\u003e\u003cfont size=\"4\"\u003eJames Bender (Author), Jeff McWherter (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9780470643204, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003ePaperback \/ softback, published 6 May 2011\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e368 pages\u003cbr\u003e23.6 x 18.9 x 1.8 cm, 0.603 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003e\u003cb\u003eHands-on guidance to creating great test-driven development practice\u003c\/b\u003e  \u003cp\u003eTest-driven development (TDD) practice helps developers recognize a well-designed application, and encourages writing a test before writing the functionality that needs to be implemented. This hands-on guide provides invaluable insight for creating successful test-driven development processes. With source code and examples featured in both C# and .NET, the book walks you through the TDD methodology and shows how it is applied to a real-world application. You’ll witness the application built from scratch and details each step that is involved in the development, as well as any problems that were encountered and the solutions that were applied.\u003c\/p\u003e \u003cul\u003e \u003cli\u003eClarifies the motivation behind test-driven development (TDD), what it is, and how it works\u003c\/li\u003e \u003cli\u003eReviews the various steps involved in developing an application and the testing that is involved prior to implementing the functionality\u003c\/li\u003e \u003cli\u003eDiscusses unit testing and refactoring\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003e\u003ci\u003eProfessional Test-Driven Development with C#\u003c\/i\u003e shows you how to create great TDD processes right away.\u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eINTRODUCTION xxv\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePART I: GETTING STARTED\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 1: THE ROAD TO TEST-DRIVEN DEVELOPMENT 3\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Classical Approach to Software Development 4\u003c\/p\u003e \u003cp\u003eA Brief History of Software Engineering 4\u003c\/p\u003e \u003cp\u003eFrom Waterfall to Iterative and Incremental 5\u003c\/p\u003e \u003cp\u003eA Quick Introduction to Agile Methodologies 6\u003c\/p\u003e \u003cp\u003eA Brief History of Agile Methodologies 6\u003c\/p\u003e \u003cp\u003eThe Principles and Practices of Test-Driven Development 7\u003c\/p\u003e \u003cp\u003eThe Concepts Behind TDD 8\u003c\/p\u003e \u003cp\u003eTDD as a Design Methodology 8\u003c\/p\u003e \u003cp\u003eTDD as a Development Practice 8\u003c\/p\u003e \u003cp\u003eThe Benefi ts of TDD 9\u003c\/p\u003e \u003cp\u003eA Quick Example of the TDD Approach 10\u003c\/p\u003e \u003cp\u003eSummary 17\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 2: AN INTRODUCTION TO UNIT TESTING 19\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat Is a Unit Test? 19\u003c\/p\u003e \u003cp\u003eUnit Test Definition 20\u003c\/p\u003e \u003cp\u003eWhat Is Not a Unit Test? 20\u003c\/p\u003e \u003cp\u003eOther Types of Tests 22\u003c\/p\u003e \u003cp\u003eA Brief Look at NUnit 24\u003c\/p\u003e \u003cp\u003eWhat Is a Unit Test Framework? 24\u003c\/p\u003e \u003cp\u003eThe Basics of NUnit 25\u003c\/p\u003e \u003cp\u003eDecoupling with Mock Objects 28\u003c\/p\u003e \u003cp\u003eWhy Mocking Is Important 28\u003c\/p\u003e \u003cp\u003eDummy, Fake, Stub, and Mock 29\u003c\/p\u003e \u003cp\u003eBest and Worst Practices 35\u003c\/p\u003e \u003cp\u003eA Brief Look at Moq 36\u003c\/p\u003e \u003cp\u003eWhat Does a Mocking Framework Do? 36\u003c\/p\u003e \u003cp\u003eA Bit About Moq 36\u003c\/p\u003e \u003cp\u003eMoq Basics 36\u003c\/p\u003e \u003cp\u003eSummary 40\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 3: A QUICK REVIEW OF REFACTORING 41\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhy Refactor? 42\u003c\/p\u003e \u003cp\u003eA Project’s Lifecycle 42\u003c\/p\u003e \u003cp\u003eMaintainability 43\u003c\/p\u003e \u003cp\u003eCode Metrics 43\u003c\/p\u003e \u003cp\u003eClean Code Principles 45\u003c\/p\u003e \u003cp\u003eOOP Principles 45\u003c\/p\u003e \u003cp\u003eEncapsulation 45\u003c\/p\u003e \u003cp\u003eInheritance 46\u003c\/p\u003e \u003cp\u003ePolymorphism 48\u003c\/p\u003e \u003cp\u003eThe SOLID Principles 49\u003c\/p\u003e \u003cp\u003eThe Single Responsibility Principle 50\u003c\/p\u003e \u003cp\u003eThe Open\/Close Principle 50\u003c\/p\u003e \u003cp\u003eThe Liskov Substitution Principle 51\u003c\/p\u003e \u003cp\u003eThe Interface Segregation Principle 51\u003c\/p\u003e \u003cp\u003eThe Dependency Inversion Principle 52\u003c\/p\u003e \u003cp\u003eCode Smells 52\u003c\/p\u003e \u003cp\u003eWhat Is a Code Smell? 52\u003c\/p\u003e \u003cp\u003eDuplicate Code and Similar Classes 53\u003c\/p\u003e \u003cp\u003eBig Classes and Big Methods 54\u003c\/p\u003e \u003cp\u003eComments 55\u003c\/p\u003e \u003cp\u003eBad Names 56\u003c\/p\u003e \u003cp\u003eFeature Envy 57\u003c\/p\u003e \u003cp\u003eToo Much If\/Switch 58\u003c\/p\u003e \u003cp\u003eTry\/Catch Bloat 59\u003c\/p\u003e \u003cp\u003eTypical Refactoring 60\u003c\/p\u003e \u003cp\u003eExtract Classes or Interfaces 60\u003c\/p\u003e \u003cp\u003eExtract Methods 62\u003c\/p\u003e \u003cp\u003eRename Variables, Fields, Methods, and Classes 66\u003c\/p\u003e \u003cp\u003eEncapsulate Fields 67\u003c\/p\u003e \u003cp\u003eReplace Conditional with Polymorphism 68\u003c\/p\u003e \u003cp\u003eAllow Type Inference 71\u003c\/p\u003e \u003cp\u003eSummary 71\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 4: TEST-DRIVEN DEVELOPMENT: LET THE TESTS BE YOUR GUIDE 73\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIt Starts with the Test 74\u003c\/p\u003e \u003cp\u003eRed, Green, Refactor 76\u003c\/p\u003e \u003cp\u003eThe Three Phases of TDD 77\u003c\/p\u003e \u003cp\u003eThe Red Phase 77\u003c\/p\u003e \u003cp\u003eThe Green Phase 78\u003c\/p\u003e \u003cp\u003eThe Refactoring Phase 79\u003c\/p\u003e \u003cp\u003eStarting Again 79\u003c\/p\u003e \u003cp\u003eA Refactoring Example 79\u003c\/p\u003e \u003cp\u003eThe First Feature 80\u003c\/p\u003e \u003cp\u003eMaking the First Test Pass 83\u003c\/p\u003e \u003cp\u003eThe Second Feature 83\u003c\/p\u003e \u003cp\u003eRefactoring the Unit Tests 85\u003c\/p\u003e \u003cp\u003eThe Third Feature 87\u003c\/p\u003e \u003cp\u003eRefactoring the Business Code 88\u003c\/p\u003e \u003cp\u003eCorrecting Refactoring Defects 91\u003c\/p\u003e \u003cp\u003eThe Fourth Feature 93\u003c\/p\u003e \u003cp\u003eSummary 94\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 5: MOCKING EXTERNAL RESOURCES 97\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Dependency Injection Pattern 98\u003c\/p\u003e \u003cp\u003eWorking with a Dependency Injection Framework 99\u003c\/p\u003e \u003cp\u003eAbstracting the Data Access Layer 108\u003c\/p\u003e \u003cp\u003eMoving the Database Concerns Out of the Business Code 108\u003c\/p\u003e \u003cp\u003eIsolating Data with the Repository Pattern 108\u003c\/p\u003e \u003cp\u003eInjecting the Repository 109\u003c\/p\u003e \u003cp\u003eMocking the Repository 112\u003c\/p\u003e \u003cp\u003eSummary 113\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePART II: PUTTING BASICS INTO ACTION\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 6: STARTING THE SAMPLE APPLICATION 117\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eDefi ning the Project 118\u003c\/p\u003e \u003cp\u003eDeveloping the Project Overview 118\u003c\/p\u003e \u003cp\u003eDefi ning the Target Environment 119\u003c\/p\u003e \u003cp\u003eChoosing the Application Technology 120\u003c\/p\u003e \u003cp\u003eDefi ning the User Stories 120\u003c\/p\u003e \u003cp\u003eCollecting the Stories 120\u003c\/p\u003e \u003cp\u003eDefi ning the Product Backlog 122\u003c\/p\u003e \u003cp\u003eThe Agile Development Process 123\u003c\/p\u003e \u003cp\u003eEstimating 124\u003c\/p\u003e \u003cp\u003eWorking in Iterations 124\u003c\/p\u003e \u003cp\u003eCommunication Within Your Team 126\u003c\/p\u003e \u003cp\u003eIteration Zero: Your First Iteration 127\u003c\/p\u003e \u003cp\u003eTesting in Iteration Zero 127\u003c\/p\u003e \u003cp\u003eEnding an Iteration 128\u003c\/p\u003e \u003cp\u003eCreating the Project 129\u003c\/p\u003e \u003cp\u003eChoosing the Frameworks 129\u003c\/p\u003e \u003cp\u003eDefi ning the Project Structure 131\u003c\/p\u003e \u003cp\u003eOrganizing Project Folders 131\u003c\/p\u003e \u003cp\u003eCreating the Visual Studio Solution 132\u003c\/p\u003e \u003cp\u003eSummary 134\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 7: IMPLEMENTING THE FIRST USER STORY 137\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe First Test 138\u003c\/p\u003e \u003cp\u003eChoosing the First Test 138\u003c\/p\u003e \u003cp\u003eNaming the Test 139\u003c\/p\u003e \u003cp\u003eWriting the Test 140\u003c\/p\u003e \u003cp\u003eImplementing the Functionality 148\u003c\/p\u003e \u003cp\u003eWriting the Simplest Thing That Could Possibly Work 148\u003c\/p\u003e \u003cp\u003eRunning the Passing Test 157\u003c\/p\u003e \u003cp\u003eWriting the Next Test 158\u003c\/p\u003e \u003cp\u003eImproving the Code by Refactoring 165\u003c\/p\u003e \u003cp\u003eTriangulation of Tests 166\u003c\/p\u003e \u003cp\u003eSummary 166\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 8: INTEGRATION TESTING 169\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eIntegrate Early; Integrate Often 170\u003c\/p\u003e \u003cp\u003eWriting Integration Tests 171\u003c\/p\u003e \u003cp\u003eHow to Manage the Database 171\u003c\/p\u003e \u003cp\u003eHow to Write Integration Tests 172\u003c\/p\u003e \u003cp\u003eReviewing the ItemTypeRepository 173\u003c\/p\u003e \u003cp\u003eAdding Ninject for Dependency Injection 174\u003c\/p\u003e \u003cp\u003eCreating the Fluent NHibernate Confi guration 177\u003c\/p\u003e \u003cp\u003eCreating the Fluent NHibernate Mapping 179\u003c\/p\u003e \u003cp\u003eCreating the Integration Test 183\u003c\/p\u003e \u003cp\u003eEnd-to-End Integration Tests 191\u003c\/p\u003e \u003cp\u003eKeeping Various Types of Tests Apart 191\u003c\/p\u003e \u003cp\u003eWhen and How to Run Integration Tests 191\u003c\/p\u003e \u003cp\u003eSummary 192\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePART III: TDD SCENARIOS\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 9: TDD ON THE WEB 197\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eASP.NET Web Forms 197\u003c\/p\u003e \u003cp\u003eWeb Form Organization 198\u003c\/p\u003e \u003cp\u003eASPX Files 198\u003c\/p\u003e \u003cp\u003eCode-Behind Files 198\u003c\/p\u003e \u003cp\u003eImplementing Test-Driven Development with MVP and Web Forms 199\u003c\/p\u003e \u003cp\u003eWorking with the ASP.NET MVC 210\u003c\/p\u003e \u003cp\u003eMVC 101 211\u003c\/p\u003e \u003cp\u003eMicrosoft ASP.NET MVC 3.0 212\u003c\/p\u003e \u003cp\u003eCreating an ASP.NET MVC Project 212\u003c\/p\u003e \u003cp\u003eCreating Your First Test 213\u003c\/p\u003e \u003cp\u003eMaking Your First Test Pass 215\u003c\/p\u003e \u003cp\u003eCreating Your First View 216\u003c\/p\u003e \u003cp\u003eGluing Everything Together 217\u003c\/p\u003e \u003cp\u003eUsing the MVC Contrib Project 220\u003c\/p\u003e \u003cp\u003eASP.NET MVC Summarized 220\u003c\/p\u003e \u003cp\u003eWorking with JavaScript 220\u003c\/p\u003e \u003cp\u003eJavaScript Testing Frameworks 221\u003c\/p\u003e \u003cp\u003eSummary 226\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 10: TESTING WINDOWS COMMUNICATION FOUNDATION SERVICES 227\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWCF Services in Your Application 228\u003c\/p\u003e \u003cp\u003eServices Are Code Too 228\u003c\/p\u003e \u003cp\u003eTesting WCF Services 228\u003c\/p\u003e \u003cp\u003eRefactoring for Testability 229\u003c\/p\u003e \u003cp\u003eIntroducing Dependency Injection to Your Service 231\u003c\/p\u003e \u003cp\u003eWriting the Test 236\u003c\/p\u003e \u003cp\u003eStubbing the Dependencies 239\u003c\/p\u003e \u003cp\u003eVerifying the Results 243\u003c\/p\u003e \u003cp\u003eTrouble Spots to Watch 244\u003c\/p\u003e \u003cp\u003eSummary 244\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 11: TESTING WPF AND SILVERLIGHT APPLICATIONS 245\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eThe Problem with Testing the User Interface 246\u003c\/p\u003e \u003cp\u003eThe MVVM Pattern 246\u003c\/p\u003e \u003cp\u003eHow MVVM Makes WPF\/Silverlight Applications Testable 248\u003c\/p\u003e \u003cp\u003eBringing It All Together 261\u003c\/p\u003e \u003cp\u003eSummary 263\u003c\/p\u003e \u003cp\u003e\u003cb\u003ePART IV: REQUIREMENTS AND TOOLS\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 12: DEALING WITH DEFECTS AND NEW REQUIREMENTS 267\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eHandling Change 268\u003c\/p\u003e \u003cp\u003eChange Happens 268\u003c\/p\u003e \u003cp\u003eAdding New Features 268\u003c\/p\u003e \u003cp\u003eAddressing Defects 269\u003c\/p\u003e \u003cp\u003eStarting with a Test 270\u003c\/p\u003e \u003cp\u003eChanging the Code 272\u003c\/p\u003e \u003cp\u003eKeeping the Tests Passing 276\u003c\/p\u003e \u003cp\u003eSummary 276\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 13: THE GREAT TOOL DEBATE 279\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eTest Runners 279\u003c\/p\u003e \u003cp\u003eTestDriven.NET 280\u003c\/p\u003e \u003cp\u003eDeveloper Express Test Runner 280\u003c\/p\u003e \u003cp\u003eGallio 281\u003c\/p\u003e \u003cp\u003eUnit Testing Frameworks 282\u003c\/p\u003e \u003cp\u003eMSTest 282\u003c\/p\u003e \u003cp\u003eMbUnit 283\u003c\/p\u003e \u003cp\u003exUnit 284\u003c\/p\u003e \u003cp\u003eMocking Frameworks 285\u003c\/p\u003e \u003cp\u003eRhino Mocks 285\u003c\/p\u003e \u003cp\u003eType Mock 287\u003c\/p\u003e \u003cp\u003eDependency Injection Frameworks 289\u003c\/p\u003e \u003cp\u003eStructure Map 289\u003c\/p\u003e \u003cp\u003eUnity 291\u003c\/p\u003e \u003cp\u003eWindsor 293\u003c\/p\u003e \u003cp\u003eAutofac 294\u003c\/p\u003e \u003cp\u003eMiscellaneous Useful Tools 295\u003c\/p\u003e \u003cp\u003enCover 295\u003c\/p\u003e \u003cp\u003ePEX 295\u003c\/p\u003e \u003cp\u003eHow to Introduce TDD to Your Team 296\u003c\/p\u003e \u003cp\u003eWorking in Environments That Are Resistant to Change 297\u003c\/p\u003e \u003cp\u003eWorking in Environments That Are Accepting of Change 297\u003c\/p\u003e \u003cp\u003eSummary 297\u003c\/p\u003e \u003cp\u003e\u003cb\u003eCHAPTER 14: CONCLUSIONS 299\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003eWhat You Have Learned 299\u003c\/p\u003e \u003cp\u003eYou Are the Client of Your Code 300\u003c\/p\u003e \u003cp\u003eFind the Solutions Step by Step 300\u003c\/p\u003e \u003cp\u003eUse the Debugger as a Surgical Instrument 300\u003c\/p\u003e \u003cp\u003eTDD Best Practices 301\u003c\/p\u003e \u003cp\u003eUse Signifi cant Names 301\u003c\/p\u003e \u003cp\u003eWrite at Least One Test for One Unit of Functionality 301\u003c\/p\u003e \u003cp\u003eKeep Your Mocks Simple 302\u003c\/p\u003e \u003cp\u003eThe Benefi ts of TDD 302\u003c\/p\u003e \u003cp\u003eHow to Introduce TDD in Your Team 303\u003c\/p\u003e \u003cp\u003eSummary 304\u003c\/p\u003e \u003cp\u003eAPPENDIX: TDD KATAS 307\u003c\/p\u003e \u003cp\u003eWorking with TDD Katas 307\u003c\/p\u003e \u003cp\u003eShare Your Work 308\u003c\/p\u003e \u003cp\u003eOSIM User Stories 308\u003c\/p\u003e \u003cp\u003eINDEX 311\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Computer programming \/ software development [\u003ca title=\"See our other books on Computer programming \/ software development\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Computer%20programming%20\/%20software%20development%20%5BUM%5D%22\"\u003eUM\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wrox","offers":[{"title":"Brand New","offer_id":52516604150040,"sku":"9780470643204","price":25.67,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9780470643204.jpg?v=1786691400","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/professional-test-driven-development-with-c-developing-real-world-applications-with-tdd-paperback-softback-9780470643204","provider":"Freshly Printed Books","version":"1.0","type":"link"}