Why not just create an abstract test case, that throughly tests your base class. Then concrete implementations of Task, would have similiar concrete test cases. You end up with a parallel inheritance hierarchy - but it works well for us. We've been doing it on our project for over a year.