Browse Questions
- All three are test doubles — fake objects used in place of real dependencies — but with different roles.
- Snapshot testing captures a reference image of a view and compares future runs against it.
- OSLog is Apple's structured logging framework.
- Unstructured Task { ...
Answer: All three are test doubles — fake objects used in place of real dependencies — but with different roles.
- Stub — returns hardcoded values, no behaviour verification
- Mock — verifies that specific methods were called
- Spy — wraps real implementation, records calls for later verification
Code Example:
protocol AnalyticsService {
func track(_ event: String)
}
// Stub — just returns values, doesn't verify calls
class StubAnalytics: AnalyticsService {
func track(_ event: String) { } // does nothing
}
// Mock — verifies interactions
class MockAnalytics: AnalyticsService {
var trackedEvents: [String] = []
func track(_ event: String) {
trackedEvents.append(event)
}
}
// In test
func test_login_tracksEvent() {
let analytics = MockAnalytics()
let viewModel = LoginViewModel(analytics: analytics)
viewModel.login(username: "alice", password: "pass")
XCTAssertEqual(analytics.trackedEvents, ["login_success"])
}