Interfaces and Unit testing

Steven Schveighoffer schveiguy at yahoo.com
Fri Feb 18 08:27:31 PST 2011


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


More information about the Digitalmars-d mailing list