added an abstract class to implement test cases