Hi Kyriakos,

The most straight-forward way to combine dependency injection and unit testing 
(with mocks) is indeed constructor injection as in the docu page you linked. 
However, this only works if that object is created in a DI-aware way, that is, 
either injected itself or created with something like 
[i]Components#newInstance[/i]. In this case, it's currently created manually 
with [i]new[/i], so injections don't work.

In order to make your class DI-aware and still a singleton, you can annotate it 
with the [url=https://github.com/google/guice/wiki/Scopes]@Singleton[/url] 
scope and make sure it's injected by classes using it instead of grabbed 
through [i]#getInstance[/i]. But be aware that this will only work if classes 
using it are injected (or more precisely: DI-aware) themselves.

[code]
public MyRESTService1 {
        // inject this somehow - ideally through constructor
        private final MyClass myClass;

        ...
}

public class MyClass {
        
        private final SimpleTranslator i18n;

        @Inject
        public MyClass(SimpleTranslator i18n) {
                this.i18n = i18n;
        }

        public doSomething() {
                i18n.translate(...);
        }
}
[/code]

If for some reason injecting [i]MyClass[/i] is not an option, you could work 
around it by manually provding a [i]SimpleTranslator[/i] from unit tests. 
Either use [i]Components#setComponentProvider[/i] with some binding for 
[i]SimpleTranslator[/i] or, more directly, create a protected setter for 
[i]i18n[/i], which is visible within the same package, where your test class 
probably is. But those are somewhat hacky workarounds; proper constructor 
injection is most likely the high road.

HTH,
Cedric

-- 
Context is everything: 
http://forum.magnolia-cms.com/forum/thread.html?threadId=aca2f2f6-f33c-4bba-8123-f6bf9cfea661


----------------------------------------------------------------
For list details, see http://www.magnolia-cms.com/community/mailing-lists.html
Alternatively, use our forums: http://forum.magnolia-cms.com/
To unsubscribe, E-mail to: <user-list-unsubscr...@magnolia-cms.com>
----------------------------------------------------------------

Reply via email to