add reusable abstract classes
unit test refinements