1.4 KiB
1.4 KiB
Testing with samber/do
Container Cloning
Clone containers for isolated tests:
func TestUserService(t *testing.T) {
// Create test container by cloning main container
testInjector := mainInjector.Clone()
// Override with mocks
mockDB := &MockDatabase{}
do.OverrideValue(testInjector, mockDB)
// Test with mocked dependencies
service := do.MustInvoke[UserService](testInjector)
// ... test code
}
Reusable Test Helpers
func SetupTestContainer(t *testing.T) do.Injector {
injector := do.New()
do.Provide(injector, func(i do.Injector) (Database, error) {
return &MockDatabase{}, nil
})
return injector
}
Quick Reference
Testing & Overrides
| Function | Purpose |
|---|---|
injector.Clone() |
Clone container for testing |
injector.CloneWithOpts() |
Clone with custom options |
do.Override[T]() |
Replace service (use in tests) |
do.OverrideNamed[T]() |
Replace named service |
do.OverrideValue[T]() |
Replace value service |
do.OverrideNamedValue[T]() |
Replace named value |
do.OverrideTransient[T]() |
Replace transient factory |
do.OverrideNamedTransient[T]() |
Replace named transient factory |