Hi Bill, my silly question is: why do you need invoking the logger in the constructor? :)
TIA, -Simo http://people.apache.org/~simonetripodi/ http://twitter.com/simonetripodi On Sun, Jun 16, 2013 at 6:06 PM, William Speirs <[email protected]> wrote: > OK... I'll wait for that new module and maybe give Onami another shot. > > For what it's worth, it seems like a lot more code in my unit tests when > trying to use Onami. IMO, you never want to use the injector when running a > unit test. It's best to inject via constructor, then simply call new in your > unit test and provide mocked instances via the constructor. Using > @LoggerInject violates this because it's a field injection, and therefore is > causing the issue. > > So it's a question of "is it worth saving typing to setup the logger in each > class" vs "the headache of setting up the injector in each unit tests"? > Right now, I'm not sure... > > Thanks... > > Bill- > > > On Sun, Jun 16, 2013 at 11:47 AM, Simone Tripodi <[email protected]> > wrote: >> >> Hi Bill, >> >> I am sorry you stumbled in a Guice/Onami-Logger limitation: >> Onami-Logger indeed injects the logger instance AFTER the injectee is >> created by the Guice framework, via a MembersInjector<I> >> implementation, that is why you cannot use the logged inside the >> constructor - it has not been injected yet :( >> >> HTH, all the best, >> -Simo >> >> http://people.apache.org/~simonetripodi/ >> http://twitter.com/simonetripodi >> >> >> On Sat, Jun 15, 2013 at 10:55 PM, William Speirs <[email protected]> >> wrote: >> > I'm trying to use Slf4jLoggingModule in a unit test with an >> > AssistedInject. Here is my basic setup: >> > >> > >> > public class BaseClass { >> > private @InjectLogger Logger LOG; >> > >> > public BaseClass() { >> > LOG.debug("Calling constructor"); // dies with NPE >> > } >> > >> > public class ClassA extends BaseClass { >> > private @InjectLogger Logger LOG; >> > >> > @Inject >> > public ClassA(@Assisted Bean bean) { >> > super(); >> > } >> > >> > public interface ClassAFactory { >> > public ClassA create(Bean bean); >> > } >> > } >> > >> > @RunWith( OnamiRunner.class ) >> > @MockFramework( MockType.MOCKITO ) >> > public class ClassATest extends AbstractModule { >> > >> > @Inject ClassAFactory factory; >> > >> > @GuiceProvidedModules >> > public static Module createComplexModule() { >> > return new Slf4jLoggingModule(); >> > } >> > >> > @Override >> > public void configure() { >> > install(new FactoryModuleBuilder() >> > .implement(ClassA.class, ClassA.class) >> > .build(ClassAFactory.class)); >> > } >> > >> > @Test >> > public void test() throws Exception { >> > ClassA a = factory.create(bean); >> > } >> > } >> > >> > >> > What am I doing wrong? This is my first time using Onami and so I'm >> > sure I'm missing something obvious/stupid. >> > >> > Thanks... >> > >> > Bill- > >
