My notes on unit testing in Xcode
Unit tests should follow the FIRST principles: Fast, Isolated, Repeatable, Self-verifying, and Timely.
Xcode unit testing
- Under targets, add target, add unit test
- In the
...Test/...Tests.swift
file inside thetestExample
method addXCTAssertEqual("Hello, World!", "Hello, World!")
- Product -> Test (cmd + U) alternatively: right click the
...Tests.swift
and click: Run …Tests
UnitTest template:
import XCTest
class SomeUnitTest: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testExample() {
XCTAssertEqual("Hello, World!", "Hello, World!")
}
func testPerformanceExample() {
self.measure { }
}
}
Gotchas:
- Name the test target with out underscore characters. XCode doesn’t like underscores sometimes
Pro
- Writing tests first gives us a clear perspective on the API design, by getting into the mindset of being a client of the API before it exists.
- Good tests serve as great documentation of expected behaviour.
- Some tests for core functionality is good
Con
- Hard to pivot after many tests are written
- Hard to reorg code
- High code coverage makes code bureaucratic
Resources:
- https://www.raywenderlich.com/101306/unit-testing-tutorial-mocking-objects
RGR ( Red — Green — Refactor ) methodology
Red, Green and Refactor are stages of the TDD (Test Driven Development).
- Red: Write a small amount of test code usually no more than seven lines of code and watch it fail.
- Green: Write a small amount of production code. Again, usually no more than seven lines of code and make your test pass.
- Refactor: Tests are passing, you can make changes without worrying. Clean up your code.
Enable parallel tests:
- To find this option just google: “Execute in parallel on Simulator” (its in edit scheme, test, info, options) Execute in parallel on Simulator. This will run your UI and unit tests in parallel on multiple simulators and speeds up your tests drastically.
Note:
There is a collection post named: _2021-06-21-my-top-unit-testing-posts