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