مدولار کردن پروژههای قدیمی با استفاده از TDD: توسعه مبتنی بر آزمون با XCTest برای iOS
Modularizing Legacy Projects Using TDD : Test-Driven Development with XCTest for IOS
معرفی کتاب «مدولار کردن پروژههای قدیمی با استفاده از TDD: توسعه مبتنی بر آزمون با XCTest برای iOS» (با عنوان لاتین Modularizing Legacy Projects Using TDD : Test-Driven Development with XCTest for IOS) نوشتهٔ Khaled El-Morabea, Hassaan El-Garem، منتشرشده توسط نشر Apress : Imprint: Apress در سال 2021. این کتاب در 34 صفحه، فرمت pdf، زبان انگلیسی ارائه شده است.
Improve current or new projects with top notch testability and maintainability. Writing tests improves the design of your apps, as it pushes you to have a more modularized design. This in turn improves the maintainability and sustainability of your apps. This book is for iOS developers who already know the basics of iOS and Swift development but want to learn all the testing pro features in iOS. You'll start by reviewing the TDD Cycle and how to implement these concepts on a legacy project or a new one. You'll then walk through TDD step-by-step on a blank project, including setting up test targets, assertions, and expectations. You'll follow that with all levels of testing such as unit tests, integration tests, and end-to-end tests, and also tackle fairly complex, yet badly written legacy code. The book will take you through the journey of modularizing a legacy app using TDD. Throughout this journey, you will be introduced to multiple testing concepts and techniques, like writing tests for network and core data layers. You will write tests to ensure the thread safety of your app. And you’ll add a new feature while you are in the middle of refactoring, which is an important skill so you can keep adding features while you are fixing your technical debt. By the end of this book, you will have all the tools needed to become a testing master. **What You'll Learn*** Use mocking and dependency injection to make components more testable * Write tests for asynchronous code like network code * Add new features to existing legacy apps using TDD **Who This Book Is For**Experienced iOS developers who care about software quality and meeting customer expectations. Table of Contents About the Authors About the Technical Reviewer Acknowledgments Chapter 1: TDD Basics Types of Testing Trouble with Automated Testing TDD in a Nutshell Why Use TDD? External and Internal Quality When to Use TDD? When Not to Use TDD? Refactoring Modularization Test Structure Let’s TDD Maximum Out of TDD Exercise Summary Chapter 2: Unit Tests Your First Test What Do We Want to Test? Creating a Unit Test Target Adding a Test Case Class Assert Methods Assert Method Types Truthfulness Asserts Equality Asserts Nullability Asserts Comparison Asserts Errors Asserts Expectations Expectation Types Test Ordering Randomized Ordering Code Coverage Exercise Summary Chapter 3: UI Tests Your First Test XCUITest Components Our Chapter Goal First Test Case Launching the App Querying the UI Relationships Interacting with the UI UI Events Assertions Value Assertion Accessibility Accessibility Tips Putting It All Together Improve UI Tests Exercise Summary Chapter 4: Testing Pyramid Our App UI Tests Integration Tests Unit Tests Summary Chapter 5: TDD Deep Dive CoffeePot Eye on the Big Picture Requirements Testing Pyramid First Story Architecture MVP First Integration Test Unit Tests CoffeeDrinksDataSource CoffeeDrinksModelTests CoffeeDrinksPresenterTests Test Health Check Second Story Architecture Exercise Summary Chapter 6: Modularization for the Win Why Bother with Modularization? What Is a Module? Modularizing Your App Introducing Books Modularization Process Initial Module Map Choose a Class as a Starting Point Identify the Class’s Responsibilities Refactor Responsibilities Verification Tests Refactoring Integration Test NetworkLayer MainViewModel MainViewPresenter Last Touches Test Value Rerun Verification Tests Refactor the Rest of the Responsibilities Next Starting Point Exercise Summary Chapter 7: Dependency Injection and Mocks Stubbing Mocking Test Doubles Creation Creation Using Inheritance Creation Using Protocols Dependency Injection Initializer Injection Property Injection Stubbing the Network in UI Tests Summary Chapter 8: Avoiding Multithreading Nightmares What Is Concurrency? GCD Queues Serial vs. Concurrent Sync vs. Async Cost of Concurrency Reader-Writer Problem Singleton Classes Identifying a Race Condition Applying TDD to the Problem Thread Sanitizer Make It Pass Fixing Threading Issues in Books Applying TDD Summary Chapter 9: Testing Your Network Networking ABCs HTTP Requests HTTP Responses URL Networking in iOS URLSession URLSessionConfiguration URLRequest URLSessionTask Networking in Books Process Overview Modularization process Identify the Class’s Responsibilities Design Overview NetworkLayer Tasks to Be Refactored NetworkLayer New Design Kickoff Verification Tests Make a Network Request RequestProtocol Execute Request Mocking URLSession Using URLSession Showcasing Test Value Handle a Failing Request Putting It All Together Exercise Summary Chapter 10: Taming Core Data The Core Data Stack Managed Object Model Persistent Store Coordinator Persistent Store Managed Object Context Persistent Container Core Data in Books Testing Stack CoreDataManager CoreDataStack Inject the Stack into CoreDataManager TestEntity Creation Introducing Storable Creation Implementation Saving Changes Fetching Updating Advanced Fetching Next Steps Putting It All Together Exercise Summary Chapter 11: Adding Features to a Legacy App Legacy Code Disclaimer A/B Testing New Feature Kickoff UI Tests Integration Tests Unit Tests and Actual Implementation BookViewModel BookViewPresenter Final Steps Summary Chapter 12: Handling Production Issues Our Tool Integration Production Bug Debugging UI Test Unit Tests Production Crash Debugging UI Test Handle A/B Testing Fixing Our Test Summary Index Improve current or new projects with top notch testability and maintainability. Writing tests improves the design of your apps, as it pushes you to have a more modularized design. This in turn improves the maintainability and sustainability of your apps. This book is for iOS developers who already know the basics of iOS and Swift development but want to learn all the testing pro features in iOS. You'll start by reviewing the TDD Cycle and how to implement these concepts on a legacy project or a new one. You'll then walk through TDD step-by-step on a blank project, including setting up test targets, assertions, and expectations. You'll follow that with all levels of testing such as unit tests, integration tests, and end-to-end tests, and also tackle fairly complex, yet badly written legacy code. The book will take you through the journey of modularizing a legacy app using TDD. Throughout this journey, you will be introduced to multiple testing concepts and techniques, like writing tests for network and core data layers. You will write tests to ensure the thread safety of your app. And you’ll add a new feature while you are in the middle of refactoring, which is an important skill so you can keep adding features while you are fixing your technical debt. By the end of this book, you will have all the tools needed to become a testing master. What You'll Learn Use mocking and dependency injection to make components more testable Write tests for asynchronous code like network code Add new features to existing legacy apps using TDD Who This Book Is For Experienced iOS developers who care about software quality and meeting customer expectations. Improve current or new projects with top notch testability and maintainability. Writing tests improves the design of your apps, as it pushes you to have a more modularized design. This in turn improves the maintainability and sustainability of your apps. This book is for iOS developers who already know the basics of iOS and Swift development but want to learn all the testing pro features in iOS. You'll start by reviewing the TDD Cycle and how to implement these concepts on a legacy project or a new one. You'll then walk through TDD step-by-step on a blank project, including setting up test targets, assertions, and expectations. You'll follow that with all levels of testing such as unit tests, integration tests, and end-to-end tests, and also tackle fairly complex, yet badly written legacy code. The book will take you through the journey of modularizing a legacy app using TDD. Throughout this journey, you will be introduced to multiple testing concepts and techniques, like writing tests for network and core data layers. You will write tests to ensure the thread safety of your app. And you'll add a new feature while you are in the middle of refactoring, which is an important skill so you can keep adding features while you are fixing your technical debt. By the end of this book, you will have all the tools needed to become a testing master. You will: Use mocking and dependency injection to make components more testable Write tests for asynchronous code like network code Add new features to existing legacy apps using TDD "Improve current or new projects with top notch testability and maintainability. Writing tests improves the design of your apps, as it pushes you to have a more modularized design. This in turn improves the maintainability and sustainability of your apps. This book is for iOS developers who already know the basics of iOS and Swift development but want to learn all the testing pro features in iOS. You'll start by reviewing the TDD Cycle and how to implement these concepts on a legacy project or a new one. You'll then walk through TDD step-by-step on a blank project, including setting up test targets, assertions, and expectations. You'll follow that with all levels of testing such as unit tests, integration tests, and end-to-end tests, and also tackle fairly complex, yet badly written legacy code. The book will take you through the journey of modularizing a legacy app using TDD. Throughout this journey, you will be introduced to multiple testing concepts and techniques, like writing tests for network and core data layers. You will write tests to ensure the thread safety of your app. And you'll add a new feature while you are in the middle of refactoring, which is an important skill so you can keep adding features while you are fixing your technical debt. By the end of this book, you will have all the tools needed to become a testing master."--Amazon.ca
دانلود کتاب مدولار کردن پروژههای قدیمی با استفاده از TDD: توسعه مبتنی بر آزمون با XCTest برای iOS