Modularizing legacy projects using TDD test-driven development with XCTest for IOS
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 k...
Otros Autores: | , |
---|---|
Formato: | Libro electrónico |
Idioma: | Inglés |
Publicado: |
[Place of publication not identified] :
Apress
[2021]
|
Materias: | |
Ver en Biblioteca Universitat Ramon Llull: | https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009635713106719 |
Tabla de Contenidos:
- Intro
- 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.