iOS Unit Testing by Example

ยท The Pragmatic Programmers LLC
เจˆ-เจ•เจฟเจคเจพเจฌ
358
เจชเฉฐเจจเฉ‡
เจฏเฉ‹เจ—

เจ‡เจธ เจˆ-เจ•เจฟเจคเจพเจฌ เจฌเจพเจฐเฉ‡

Fearlessly change the design of your iOS code with solid unit tests. Use Xcode's built-in test framework XCTest and Swift to get rapid feedback on all your code - including legacy code. Learn the tricks and techniques of testing all iOS code, especially view controllers (UIViewControllers), which are critical to iOS apps. Learn to isolate and replace dependencies in legacy code written without tests. Practice safe refactoring that makes these tests possible, and watch all your changes get verified quickly and automatically. Make even the boldest code changes with complete confidence.

Manual code and UI testing get slower the deeper your navigation hierarchy goes. It can take several taps just to reach a particular screen, never mind the actual workflow tests. Automatic unit testing offers such rapid feedback that it can change the rules of development. Bring testing to iOS development, even for legacy code. Use XCTest to write unit tests in Swift for all your code.

iOS developers typically reserve unit tests for their model classes alone. But that approach skips most of the code common to iOS apps, especially with UIViewControllers. Learn how to unit test these view controllers to expand your unit testing possibilities. Since good unit tests form the bedrock for safe refactoring, you're empowered to make bold changes. Learn how to avoid the most common mistakes Swift programmers make with the XCTest framework. Use code coverage to find holes in your test suites. Learn how to identify hard dependencies.

Reshape the design of your code quickly, with less risk and less fear.

เจฒเฉ‡เจ–เจ• เจฌเจพเจฐเฉ‡

Jon Reid is a leading expert in unit testing and Test-Driven Development for iOS development. He has been practicing TDD on Apple platforms since 2001. His blog, https://qualitycoding.org focuses on iOS unit testing practices.

เจ‡เจธ เจˆ-เจ•เจฟเจคเจพเจฌ เจจเฉ‚เฉฐ เจฐเฉ‡เจŸ เจ•เจฐเฉ‹

เจ†เจชเจฃเฉ‡ เจตเจฟเจšเจพเจฐ เจฆเฉฑเจธเฉ‹

เจชเฉœเฉเจนเจจ เจธเฉฐเจฌเฉฐเจงเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€

เจธเจฎเจพเจฐเจŸเจซเจผเฉ‹เจจ เจ…เจคเฉ‡ เจŸเฉˆเจฌเจฒเฉˆเฉฑเจŸ
Google Play Books เจเจช เจจเฉ‚เฉฐ Android เจ…เจคเฉ‡ iPad/iPhone เจฒเจˆ เจธเจฅเจพเจชเจค เจ•เจฐเฉ‹เฅค เจ‡เจน เจคเฉเจนเจพเจกเฉ‡ เจ–เจพเจคเฉ‡ เจจเจพเจฒ เจธเจตเฉˆเจšเจฒเจฟเจค เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจฟเฉฐเจ• เจ•เจฐเจฆเฉ€ เจนเฉˆ เจ…เจคเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เจฟเจคเฉ‹เจ‚ เจตเฉ€ เจ†เจจเจฒเจพเจˆเจจ เจœเจพเจ‚ เจ†เจซเจผเจฒเจพเจˆเจจ เจชเฉœเฉเจนเจจ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆเฅค
เจฒเฉˆเจชเจŸเจพเจช เจ…เจคเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ
เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ•เฉฐเจชเจฟเจŠเจŸเจฐ เจฆเจพ เจตเฉˆเฉฑเจฌ เจฌเฉเจฐเจพเจŠเจœเจผเจฐ เจตเจฐเจคเจฆเฉ‡ เจนเฉ‹เจ Google Play 'เจคเฉ‡ เจ–เจฐเฉ€เจฆเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ†เจกเฉ€เจ“-เจ•เจฟเจคเจพเจฌเจพเจ‚ เจธเฉเจฃ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค
eReaders เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจกเฉ€เจตเจพเจˆเจธเจพเจ‚
e-ink เจกเฉ€เจตเจพเจˆเจธเจพเจ‚ 'เจคเฉ‡ เจชเฉœเฉเจนเจจ เจฒเจˆ เจœเจฟเจตเฉ‡เจ‚ Kobo eReaders, เจคเฉเจนเจพเจจเฉ‚เฉฐ เฉžเจพเจˆเจฒ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจ†เจชเจฃเฉ‡ เจกเฉ€เจตเจพเจˆเจธ 'เจคเฉ‡ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค เจธเจฎเจฐเจฅเจฟเจค eReaders 'เจคเฉ‡ เฉžเจพเจˆเจฒเจพเจ‚ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เจฐเจจ เจฒเจˆ เจตเฉ‡เจฐเจตเฉ‡ เจธเจนเจฟเจค เจฎเจฆเจฆ เจ•เฉ‡เจ‚เจฆเจฐ เจนเจฟเจฆเจพเจ‡เจคเจพเจ‚ เจฆเฉ€ เจชเจพเจฒเจฃเจพ เจ•เจฐเฉ‹เฅค