refactored test class hierarchy, new test case only needs to implement
one function