001440803 000__ 06654cam\a2200589\a\4500 001440803 001__ 1440803 001440803 003__ OCoLC 001440803 005__ 20230309004703.0 001440803 006__ m\\\\\o\\d\\\\\\\\ 001440803 007__ cr\cn\nnnunnun 001440803 008__ 211106s2021\\\\cau\\\\\o\\\\\001\0\eng\d 001440803 019__ $$a1280461386$$a1280598700$$a1281133129$$a1281977131$$a1287263722 001440803 020__ $$a9781484274286$$q(electronic bk.) 001440803 020__ $$a1484274288$$q(electronic bk.) 001440803 020__ $$z148427427X 001440803 020__ $$z9781484274279 001440803 0247_ $$a10.1007/978-1-4842-7428-6$$2doi 001440803 035__ $$aSP(OCoLC)1283848581 001440803 040__ $$aEBLCP$$beng$$epn$$cEBLCP$$dTOH$$dORMDA$$dOCLCO$$dOCLCF$$dGW5XE$$dYDX$$dSTF$$dOCLCO$$dOCL$$dK6U$$dOCLCQ$$dUKAHL$$dOCLCQ 001440803 049__ $$aISEA 001440803 050_4 $$aQA76.76.T48 001440803 08204 $$a005.1/4$$223 001440803 08204 $$a005.3$$223 001440803 1001_ $$aEl-Morabea, Khaled. 001440803 24510 $$aModularizing legacy projects using TDD :$$btest-driven development with XCTest for IOS /$$cKhaled El-Morabea, Hassaan El-Garem. 001440803 260__ $$aBerkeley, CA :$$bApress L.P.,$$c2021. 001440803 300__ $$a1 online resource (343 pages) 001440803 336__ $$atext$$btxt$$2rdacontent 001440803 337__ $$acomputer$$bc$$2rdamedia 001440803 338__ $$aonline resource$$bcr$$2rdacarrier 001440803 500__ $$aNetworking in Books. 001440803 500__ $$aIncludes index. 001440803 5050_ $$aIntro -- 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 001440803 5058_ $$aEquality 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 001440803 5058_ $$aIntegration 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 001440803 5058_ $$aChoose 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 001440803 5058_ $$aStubbing 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 001440803 506__ $$aAccess limited to authorized users. 001440803 520__ $$aImprove 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. 001440803 588__ $$aDescription based on print version record. 001440803 650_0 $$aComputer software$$xTesting. 001440803 650_0 $$aApplication software$$xDevelopment. 001440803 650_6 $$aLogiciels d'application$$xDéveloppement. 001440803 655_0 $$aElectronic books. 001440803 7001_ $$aEl-Garem, Hassaan. 001440803 77608 $$iPrint version:$$aEl-Morabea, Khaled.$$tModularizing Legacy Projects Using TDD.$$dBerkeley, CA : Apress L.P., ©2021$$z9781484274279 001440803 852__ $$bebk 001440803 85640 $$3Springer Nature$$uhttps://univsouthin.idm.oclc.org/login?url=https://link.springer.com/10.1007/978-1-4842-7428-6$$zOnline Access$$91397441.1 001440803 909CO $$ooai:library.usi.edu:1440803$$pGLOBAL_SET 001440803 980__ $$aBIB 001440803 980__ $$aEBOOK 001440803 982__ $$aEbook 001440803 983__ $$aOnline 001440803 994__ $$a92$$bISE