Interfaces and Unit testing

Erik Meer e at m.com
Fri Feb 18 09:47:40 PST 2011


Steven Schveighoffer Wrote:

> On Fri, 18 Feb 2011 09:43:19 -0500, Erik Meer <e at m.com> wrote:
> 
> > Does using interfaces extensively have a performance drawback like using  
> > inheritance has?
> >
> > Why do I ask? I was thinking about adopting a coding practice where I  
> > define explicit interfaces for all public aspects of my classes, and  
> > then couples the interfaces closely to unit tests. Then, whenever I  
> > would create a new class using some of these interfaces the unit tests  
> > would tag along, which means the unit tests would be reusable.
> >
> > Now, if the compiler has do align stuff in some arduous way to  
> > accommodate these interfaces then this whole idea might not be worth it?  
> > Or are interfaces a no-cost constraint on the implementation?
> 
> There is a real cost associated with interfaces.  Each additional  
> interface on a class requires another pointer-sized word space.  I would  
> recommend not adding interfaces if the sole purpose is to use them for  
> unit tests.
> 
> You can reuse unit tests by creating a template function.
> 
> example:
> 
> // all classes that define foo conform to the foo definition.
> 
> class X
> {
>     int foo() {...}
> }
> 
> class Y
> {
>     int foo() {...}
> }
> 
> unittest
> {
>     void testFoo(T)(T t) { assert(t.foo() == 0); }
>     testFoo(new X);
>     testFoo(new Y);
> }
> 
> -Steve


Excellent! In addition to not introducing overhead, this is better because the "interface" is entirely verified by the unit test, i.e. you don't have to name it when defining the class.
Thanks, guys!


More information about the Digitalmars-d mailing list