add more tests
more tests
support interface injection