I know probably I need to setup mock objects with my own avalon Logger passed into enableLogging lifecycle method(right?), but wondering how are people dealing with this issue.
i.e. not having to setup a whole log of mock objects to test one implementation method ? there might not be any other option which is fine in which case, I ask if there is a repository of Mock avalon/merlin objects I can pull in to use.
Use something like easymock, http://www.easymock.org/. You just pass it the Logger interface and you get back an implementation. So there's no need for such a repository :D
Here's a complete EasyMock sample for ya:
public class ExampleComponentTest extends TestCase { private ExampleComponent component; private MockControl loggerControl; private Logger logger;
protected void setUp() { loggerControl = MockControl.createControl(Logger.class); logger = (Logger)control.getMock(); component = getComponent(); ContainerUtil.enableLogging( component, logger ); }
protected ExampleComponent getComponent() { return new ExampleComponentImpl(); }
public void testComponentIsNotSoSillyAsToCallLoggerInEnableLogging() { loggerControl.replay(); component = getComponent(); if( component instanceof LogEnabled ) { LogEnabled le = (LogEnabled)component; le.enableLogging( logger ); } loggerControl.verify(); }
public void testIsSomeConditionTrue() { assertTrue( component.isSomeConditionTrue() ); } public void testIsSomeConditionTrueLogsProperMessage() { logger.log("problem making the call"); loggerControl.rewind();
component.setSomeCondition( false ); assertFalse( component.isSomeConditionTrue() );
loggerControl().verify(); } }
That should be more than enough to get you started! (disclaimer: haven't tested this!). You may feel like setting up an abstract base class or a utility class which sets up mock service managers, loggers, etc, and tests basic lifecycle compliance. I haven't bothered to date. If someone has, please send in your stuff :D
cheers!
- LSD
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]