Hi Terry,
I absolutely agree with you about spending my time writing production code instead of wasting time on unnecessary unit tests. I also agree with you regarding aggregation/composition -- this actually started as aggregation, but most of the calls were wrapper calls that were generating (nearly) pointless unit tests. This led me to my current solution.
I follow your suggestion about mocking the base in principle, but I fail to see how it would work in practice. Running a set of shared tests seems much more elegant (particularly because it doesn't specify implementation details!), but I haven't worked out a clean way to actually accomplish this.
Another place this would be useful is for different implementations of an interface (think multiple implementations of a map or another data structure, each optimized for a different workload or resource trade-off). Each implementation would have the same externally visible behavior, but differ in their implementation details. A set of tests delivered with the interface and easily linked to an implementation would very clearly document the interface, validate implementations, and even invalidate(!) implementations when/if the spec changes.
Ultimately, sharing tests seems like a natural fit for testing OO code, but is there a clean way to accomplish this with CppUTest?