This library triggers Xcode unit tests using John Holdsworth's injectionforxcode tool.
InjectionTDD immediatelly runs your related unit tests, every time you save implemntation file with ⌘+S.
InjectionTDD
library is written in Objective-C so it works with any Swift version.
- injectionforxcode (version with TDD)
- implementation and unit test written in Swift (project can be mixed ObjC and Swift)
- Xcode 8 or Xcode 9
- valid global Xcode version using
xcode-select
- no static libraries (
.a
or static.framework
) used in a target - testing target has "Host Application"
- ⌘+⇧+U (or simple ⌘+U) required when adding new
.swift
file
- Call
xcode-select -p
- If path does not correspond to your current Xcode version, setup it using command:
sudo xcode-select -s /Applications/PATH_TO_YOUR_XCODE_VERSION/Contents/Developer
InjectionTDD is available through CocoaPods.
To install it, simply add the following line to your Podfile
, into Tests target
...
target 'REMTTests' do
# Your test Pods
pod 'InjectionTDD', '~> 0.5'
end
Add the following line to the Cartfile
and link generated .framework
library with your test target.
github "polac24/InjectionTDD"
Add binary framework to your test target. You can find compiled framework (InjectionTDD.framework.zip
) in releases section.
You can find sample integration on one approach to integrate binary framework.
- Run injectionforxcode
- After successful
InjectionTDD
integration with your test target (step 2.), run it (⌘+U) and you will see promptReady for InjectionTDD...
- It means that your unit tests wait for injection bundles and will never terminate ✅
- Using injectionforxcode, inject your implementation (e.g. shortcut ⌃+=)
- injectionforxcode automatically finds all related tests for your file and execute them
- On output console you will see summary of all actions and summary of your tests 🎉
- To get feedback immediatelly after each save with ⌘+S, enable "FileWatcher" in injectionforxcode:
- You can selectively disable
InjectionTDD
in your schema but addingINJECTION_TDD_SKIP=TRUE
environment variable in a test action:
To display notification everytime your test finishes, install extra breakpoints that present a summary of your test suite:
mkdir -p /tmp/update_breakpoints_tdd && curl https://codeload.github.com/polac24/InjectionTDD/tar.gz/master | tar -xz --strip=3 --directory /tmp/update_breakpoints_tdd InjectionTDD-master/scripts/update_breakpoints/ && cd /tmp/update_breakpoints_tdd/ && ./update_breakpoints.sh && cd -
- Keep InjectionTDD integrated all the time (e.g. add it to
Podfile
) and provide two schemas: (1) used for TDD development only, (2) used for CI with disabled InjectionTDD (see how). This helps to quickly switch between standard and TDD development.
- If you want to speed up your injection, disable code coverage. Just unselect "Gather coverage data" in your test scheme when doing TDD:
Bartosz Polaczyk, [email protected]
This library is an addition to John Holdsworth great tool injectionforxcode. More details about live code injection you will find at Injection, the App and @Orta video post.
InjectionTDD is available under the MIT license. See the LICENSE file for more info.