I have an abstract class that defines some methods. This class has two subclasses.
Should I create a fake subclass just for testing, or should I test the methods through the subclasses’ tests? Testing through the subclasses seems more natural, but then I’d have to duplicate the test code between the 2 subclasses’ tests.
What do you guys think?
You don’t have to duplicate your test code – you can write your test methods so that they accept a parameter.
Since most test frameworks don’t support tests that take parameters you can add a little wrapper that calls your parameterized test method with a specific instance. You can now easily choose whether it makes sense to call your test just once with some specific base class, or have multiple tests of the same method – one test for each of the possible base classes. Since only a thin wrapper needs to be added for each new test, there is very little code duplication.