mockService<MockedService extends ServiceBase<Object?>> function

void mockService<MockedService extends ServiceBase<Object?>>(
  1. 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;
}