My Account Log in

1 option

Modularizing legacy projects using TDD : test-driven development with XCTest for IOS / Khaled El-Morabea, Hassaan El-Garem.

O'Reilly Online Learning: Academic/Public Library Edition Available online

View online
Format:
Book
Author/Creator:
El-Morabea, Khaled, author.
El-Garem, Hassaan, author.
Language:
English
Subjects (All):
Computer software--Testing.
Computer software.
Application software--Development.
Application software.
Physical Description:
1 online resource (343 pages)
Place of Publication:
[Place of publication not identified] : Apress, [2021]
Summary:
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.
Contents:
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
Chapter 3: UI Tests
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
Chapter 4: Testing Pyramid
Our App
UI Tests
Integration Tests
Unit Tests
Chapter 5: TDD Deep Dive
CoffeePot
Eye on the Big Picture
Requirements
Testing Pyramid
First Story
Architecture
MVP
First Integration Test
CoffeeDrinksDataSource
CoffeeDrinksModelTests
CoffeeDrinksPresenterTests
Test Health Check
Second Story
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
Integration Test
NetworkLayer
MainViewModel
MainViewPresenter
Last Touches
Test Value
Rerun Verification Tests
Refactor the Rest of the Responsibilities
Next Starting Point
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
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
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
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
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
Chapter 11: Adding Features to a Legacy App
Legacy Code Disclaimer
A/B Testing
New Feature
Unit Tests and Actual Implementation
BookViewModel
BookViewPresenter
Final Steps
Chapter 12: Handling Production Issues
Our Tool
Integration
Production Bug
Debugging
UI Test
Production Crash
Handle A/B Testing
Fixing Our Test
Index.
Notes:
Description based on print version record.
Networking in Books.
Includes index.
ISBN:
9781484274286
1484274288
OCLC:
1283848581

The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.

Find

Home Release notes

My Account

Shelf Request an item Bookmarks Fines and fees Settings

Guides

Using the Find catalog Using Articles+ Using your account