add test case
redesign require mechanism