mockService<MockedService extends ServiceBase<Object?> > function
- Result result
Intercepts all ServiceBase.call invocations of type MockedService and
returns result instead of executing ServiceBase.run.
No dependency injection required — the production code stays untouched.
Call clearServiceMocks (or addTearDown(clearServiceMocks)) in your
test setup to ensure interceptors are removed after each test:
setUp(() {
mockService<UserCreateService>(Success('userCreated', alice));
addTearDown(clearServiceMocks);
});
it('creates an order when the user is valid', () {
expect(OrderOrchestrator(name: 'Alice').call(), haveSucceededWith('orderCreated'));
});
The real service logic is bypassed entirely — no database calls, no HTTP requests, no side effects.
See also clearServiceMocks to remove interceptors mid-test.
Implementation
void mockService<MockedService extends ServiceBase<Object?>>(Result<dynamic> result) {
serviceInterceptors[MockedService] = () => result;
}