重构代码，增加测试用例