Technical Testing Skills in Agile Organizations
This domain, technical testing skills in agile organizations, tests hands-on engineering knowledge that helps testers collaborate with developers and test below the UI. It covers test doubles, dependency injection, refactoring, code quality, API and contract testing, service virtualisation and non-functional checks.
Core rules
- Test doubles: dummy (passed but unused), stub (canned responses), spy (records calls), mock (expects and verifies interactions) and fake (lightweight working implementation, such as an in-memory repository). Use them to isolate the unit under test - not to replace integration testing.
- Dependency injection creates seams so doubles can replace real collaborators; tightly coupled code is hard to test.
- Refactoring improves structure without changing behaviour and is protected by automated tests. Code smells and technical debt should be visible to the whole team.
- Static analysis and code review find defects early. Statement, branch/decision, condition and MC/DC coverage show exercised code, not test quality.
- API and contract testing validate schemas and consumer expectations; consumer-driven contracts (for example Pact) catch integration mismatches. Service virtualisation stands in for unavailable dependencies.
- Non-functional testing at API level covers load, stress, soak, security (OWASP risks) and reliability.
Worked example
Service A calls Service B. Reasoning: unit-test A’s logic with a stub for B; add a consumer-driven contract test so B’s provider verifies A’s expectations; run API performance tests against a virtualised B when B is unavailable. This isolates logic, catches interface drift and removes environment blocking - three different risks, three different techniques.
Traps
Over-mocking until tests pass but integration fails; mocking third-party services without contracts; treating 100% coverage as done; ignoring test-code quality; using production data without masking; performance-testing only through the UI.