I have the following classes:
public interface Emailer {}
@Named
public class RealEmailer implements Emailer {}
@Named
public class NoOpEmailer implements Emailer {}
And my service class uses the real emailer:
public class SomeService {
@Inject
private Emailer emailer;
}
The question is, in my service test class (SomeServiceTest), how do I inject the Emailer in the service to use NoOpEmailer ? I’m using Spring for the DI framework.
If you can use Spring 3.1 you can use Profiles. This would allow you to provide two different implementations of the same bean (Emailer and NoOpEmailer). Then in your test you can use the @Profile(“test”) annotation to activate the test profile and your no op bean will be injected.