51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4501|回复: 8
打印 上一主题 下一主题

[讨论] 看看这样的单元测试,大家评价一下

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2006-6-9 14:17:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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");
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2006-6-9 21:01:35 | 只看该作者
没有注释
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2006-6-12 10:53:10 | 只看该作者

TEST_CASE_TRACE 中trace 出来的信息,基本上就是注释

TEST_CASE_TRACE 中trace 出来的信息,基本上就是注释
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2006-6-12 12:28:41 | 只看该作者
单元测试脚本,,最重要的一点,,就是简单,,简洁..
这样的测试脚本,,估计本身需要测试..
脚本太长了,,不易交流
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2006-6-13 10:52:01 | 只看该作者
JPeanut  说的很好。

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

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

这样的测试用例有没有办法改进呢?
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2006-6-13 14:04:36 | 只看该作者
准备条件一般写在在setup的,销毁用teardown
我是做java的,我的做法是自己写一个专门用于单元测试的jar提供开发人员编写测试脚本,
简化编写脚本的难度和工作量
实施下来,效果还可以,不过要抽出这样一个公共的jar,花了很多时间
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2006-6-13 17:41:40 | 只看该作者
恩,很不错的建议。
对于一些可以抽出来的部分放在setup 中是一个很好的做法

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

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

相信大家在编写测试用例的时候,也遇到这样的问题
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2006-6-17 19:51:37 | 只看该作者
象这些你可以把它们都抽出来,单独作为一个函数,哪里需要的时候直接调用就可以了。这样就可以使你的测试代码中的代码简洁化,而且有问题的时候也好查清楚。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-11 05:09 , Processed in 0.072456 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表