51Testing软件测试论坛

标题: 看看这样的单元测试,大家评价一下 [打印本页]

作者: ricmy    时间: 2006-6-9 14:17
标题: 看看这样的单元测试,大家评价一下
void  CTest_DB::TestPMDB_ClearFileData()
{
        TEST_CASE_TRACE("Begin");

        CString strSamplePath;
        strSamplePath.Format("%s\\BaseTestCase\\SwitchView",m_strCurrentPath);

        CString strTrace;
        strTrace.Format("Create a ItemFolder %s",strSamplePath);
        TEST_CASE_TRACE(strTrace);
        CItemFolder * pItemFolder;
        PMDB_CreateFolder(strSamplePath,pItemFolder);
        if (pItemFolder)
        {
                CString strOldFileName(_T("OCR Pro 4.jpg"));
                CItemFile* pOldItem = pItemFolder->GetItemFile(strOldFileName);
                strTrace.Format("Get %s ItemFile info %s",strOldFileName);
                TEST_CASE_TRACE(strTrace);
       
                CPropertyInfo * pInfo = pOldItem->GetPropertyInfo(PROPERTYID_KEYWORD);
                pInfo->SetProperData("Test PROPERTYID_KEYWORD");
                strTrace.Format("Add KeyWord Test PROPERTYID_KEYWORD",strOldFileName);
                TEST_CASE_TRACE(strTrace);

                pInfo = pOldItem->GetPropertyInfo(PROPERTYID_AUTHOR);
                pInfo->SetProperData("Test PROPERTYID_AUTHOR");
                strTrace.Format("Add Author  Test PROPERTYID_AUTHOR");
                TEST_CASE_TRACE(strTrace);

                pInfo = pOldItem->GetPropertyInfo(PROPERTYID_MEMORY);
                pInfo->SetProperData("Test PROPERTYID_MEMORY");
                strTrace.Format("Add Memory  Test PROPERTYID_MEMORY");
                TEST_CASE_TRACE(strTrace);

                pOldItem->UpdateProperty(FALSE);

                CString strFile;
                strFile.Format("%s\\OCR Pro 4.jpg",strSamplePath);
                strTrace.Format("Call PMDB_ClearFileData to Delete file info");
                TEST_CASE_TRACE(strTrace);
                PMDB_ClearFileData(strFile);
       
                pOldItem->UpdateProperty(TRUE);
                CString strData;
                pInfo = pOldItem->GetPropertyInfo(PROPERTYID_KEYWORD);
                strData = pInfo->GetProperData();
       
                strTrace.Format("Get File %s,KeyWord = %s",strFile,strData);
                TEST_CASE_TRACE(strTrace);
       
                TEST_CASE_ASSERT(strData.CompareNoCase("Test PROPERTYID_KEYWORD") != 0);

                pInfo = pOldItem->GetPropertyInfo(PROPERTYID_AUTHOR);
                strData = pInfo->GetProperData();
                strTrace.Format("Get File %s,AUTHOR = %s",strFile,strData);
                TEST_CASE_TRACE(strTrace);
                TEST_CASE_ASSERT(strData.CompareNoCase("Test PROPERTYID_AUTHOR") != 0);
       
                pInfo = pOldItem->GetPropertyInfo(PROPERTYID_MEMORY);
                strData = pInfo->GetProperData();
                strTrace.Format("Get File %s,MEMORY = %s",strFile,strData);
                TEST_CASE_TRACE(strTrace);

                TEST_CASE_ASSERT(strData.CompareNoCase("Test PROPERTYID_MEMORY") != 0);

                strTrace.Format("Free ItemFolder");
                TEST_CASE_TRACE(strTrace);
               
                delete pItemFolder;
                pItemFolder = NULL;
        }


        TEST_CASE_TRACE("End");
}
作者: wheetle    时间: 2006-6-9 21:01
没有注释
作者: ricmy    时间: 2006-6-12 10:53
标题: TEST_CASE_TRACE 中trace 出来的信息,基本上就是注释
TEST_CASE_TRACE 中trace 出来的信息,基本上就是注释
作者: JPeanut    时间: 2006-6-12 12:28
单元测试脚本,,最重要的一点,,就是简单,,简洁..
这样的测试脚本,,估计本身需要测试..
脚本太长了,,不易交流
作者: ricmy    时间: 2006-6-13 10:52
JPeanut  说的很好。

但是很多时候,一个函数是需要上下文的,而且测试这个函数还需要一定的环境
在上面的测试用例中有很多部分是用在准备测试环境
我来解释下上面的代码:
整个代码要测试的函数是   PMDB_ClearFileData(strFile);
这个函数的功能是从数据库中清除一个文件的信息

要测试这样的函数,你将需要有下面几步
1.为某个文件添加信息
2.调用测试函数( PMDB_ClearFileData(strFile);)
3.获取文件信息以确认文件信息是否为NULL

这样的测试用例有没有办法改进呢?
作者: JPeanut    时间: 2006-6-13 14:04
准备条件一般写在在setup的,销毁用teardown
我是做java的,我的做法是自己写一个专门用于单元测试的jar提供开发人员编写测试脚本,
简化编写脚本的难度和工作量
实施下来,效果还可以,不过要抽出这样一个公共的jar,花了很多时间
作者: ricmy    时间: 2006-6-13 17:41
恩,很不错的建议。
对于一些可以抽出来的部分放在setup 中是一个很好的做法

我们测试的时候是针对对象来测试的,而不是静态的代码,不同的对象创建的方法是不一样的。
比如上面的例子中,要创建一个文件的对象(CItemFile),你首先需要创建一个目录对象(CItemFolder),只有通过目录对象你才可以获得要测试的文件对象(CItemFile* pOldItem = pItemFolder->GetItemFile(strOldFileName);)

在本测试用例中,你会发现测试环境不光是代码的部分,同时还需要在硬盘上建立一定的物理测试环境。
其中【strSamplePath.Format("%s\\BaseTestCase\\SwitchView",m_strCurrentPath);】就是要求必须才系统中存在这样一个目录,并且目录下具备一个名叫【   CString strOldFileName(_T("OCR Pro 4.jpg"));】的文件

相信大家在编写测试用例的时候,也遇到这样的问题
作者: zixuxuwu    时间: 2006-6-17 19:51
象这些你可以把它们都抽出来,单独作为一个函数,哪里需要的时候直接调用就可以了。这样就可以使你的测试代码中的代码简洁化,而且有问题的时候也好查清楚。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2