无意中形成了高耦合
问题:例如,CMyClass类中一个函数中有这样的语句:
CDemoApp* pApp = (CDemoApp*)AfxGetApp();
UNIT var = pApp->GetXXX()->Getxxxx();
由于CDemoApp是工程的最高层类,可能跟工程中的所有类关联,这两行代码就造成被测试对象跟工程中的所有类耦合。耦合具有扩散性,纵向来说,CMyClass类的所有子类也可能跟工程中的所有类关联,横向来说,所有使用了CMyClass类的类,也可能跟工程中的所有类关联,从而形成了盘根错节的关系。这种问题往往很难发现,但把代码加入测试工程后,一般来说是通不过编译的,从而使问题暴露。
解决:修改被测试代码,去除耦合。把需要从pApp指针中取得的数据改为由参数传进来,这两行代码移到客户程序(即调用被测试函数的代码)中,如果客户程序也是实体类,则继续往上移,直到界面类。
说明:这类无意中形成的耦合非常常见,一般的代码审查、静态扫描都很难发现这类问题,但把代码加入测试工程后,编译器却能轻松发现。这类问题只要及时发现了,消除并不难,经过简单的代码重构,就可以有效地提高代码质量,特别是提高代码的可复用性,也使单元测试可以顺利进行。