use abstract class for testing