thanks much for the detailed explanation.

I was trying to only test out interface contract of my own service and
not worry about testing avalon interface contracts. That I would have
just left to the AbstractMerlinTestCase.

I think that is what you are taking into account if I am not mistaking. 
A more complete test of ALL of interface contracts.

Korosh.





On Mon, 2004-01-26 at 17:06, Leo Simons wrote:
> korosh afshar wrote:
> <snip the irrelevant bits of the sample/>
> >>     private ExampleComponent component;
> // ...
> >>         ContainerUtil.enableLogging( component, logger );
> > 
> > what is the use for ContainerUtil  if I can just call
> > MyComponent.enableLogging( logger )  ?
> 
> in the sample above, the test is testing the interface contract 
> ExampleComponent implemented by ExampleComponentImpl. Thus, you need to 
> cast the component to a LogEnabled. Which is precisely what 
> ContainerUtil does for you (look up the source for the method; it's 
> three lines).
> 
> >>     protected ExampleComponent getComponent()
> >>     {
> >>         return new ExampleComponentImpl();
> >>     }
> >>
> >>     public void testComponentIsNotSoSillyAsToCallLoggerInEnableLogging()
> >>     {
> >>       loggerControl.replay();
> >>       component = getComponent();
> >>       if( component instanceof LogEnabled )
> >>       {
> >>         LogEnabled le = (LogEnabled)component;
> >>         le.enableLogging( logger );
> >>       }
> > 
> > I don't underestand whats going on here?   getComponent will always give
> > me an instance of my own component. Why the check for LogEnabled
> > instance ?
> 
> consider an
> 
> AlternativeExampleComponentTestCase extends ExampleComponentTestCase
> {
>    protected ExampleComponent getComponent()
>    {
>      return new AlternativeExampleComponent();
>        // AlternativeExampleComponent does not implement LogEnabled!!!
>    }
> }
> 
> the test should not fail in this case (the AlternativeExampleComponent 
> does not log things from enableLogging(), since it doesn't have an 
> enableLogging() method!).
> 
> BTW, you could replace the if() {} check and body with 
> ContainerUtil.enableLogging() again, but I kept it here for clarity.
> 
> > sorry, the descriptive method name didn't clear things up for me.  
> > component will never call its own lifecycle method.
> 
> the component isn't calling its own method. The testcase is taking on 
> the role of the container and calling enableLogging. The test will fail 
> if the component has something like
> 
> public void enableLogging( Logger logger )
> {
>    logger.debug("Hey, I'm here!");
> }
> 
> note that all of this has little to do with the specifics of testing 
> avalon components and more with testing practices in general. It's okay 
> if things don't make sense; I'm just really delving into all of this 
> myself :D


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to