您好,欢迎访问三七文档
单元测试规范一、分析开发人员提供的接口说明文档开发人员先提供一份接口的说明文档和接口后,首先分析接口文档,看看有什么疑问之类的总结一下,然后整理测试点。然后跟开发人员过一下测试点。整理测试点的时候,主要是结合业务逻辑进行测试。一些通用的测试点整理如下:当参数是String类型时,主要的测试点如下:1.当参数为Null时候的验证(要看业务的需要是抛出异常还是返回正确的结果)。2.当参数为Empry时候的验证(要看业务的需要是抛出异常还是返回正确的结果)。3.当参数的长度正好是可以输入的最大长度的验证。4.当参数的长度超过可以输入的最大长度的验证。5.当参数中包含特殊字符的验证。6.当参数中包含汉字的验证。7.当参数中包含英文字母、数字的验证。当参数是Int(或者别的数值类型的时候),主要的测试点如下:1.当参数是0时候的验证。2.当参数是正数时候的验证。3.当参数是负数时候的验证。当参数是对象类型的时候,主要的测试点如下:1.当参数是Null时候的测试2.当参数是正常情况的测试当往数据库中插入数据记录的时候,主要的测试点如下:1.插入数据的参数各种情况的验证,例如string类型时候的各种验证。2.插入数据唯一性的验证,这主要看业务规则有没有唯一的主键,是覆盖以前的记录还是抛出异常。当更新数据库中的记录的时候,主要的测试点如下:1.当更新数据的时候,参数的各种情况的验证,例如string类型时候的各种验证。2.当更新数据的时候,所有的参数都发生改变的验证3.当更新数据的时候,一部分参数发生改变的验证4.当更新数据的时候,所有的参数都不发生变化的验证5.当更新数据的时候,如果数据列中有主键的时候,更新为已经存在的主键的验证。当删除数据的时候,主要的测试点如下:1.当删除数据的时候,数据是否删除成功的测试2.当删除数据的时候,删除已经存在的数据的测试以上主要是针对各种数据类型进行的测试,主要的还是根据业务逻辑设计测试用例。二、在VS2010中新创建一个测试项目1)在VS2010中新建一个测试项目。2)添加引用测试的dll引用的是BS_Dev\_ExternalReferences下的。注意如果要用到读取XML中的数据或者连接数据库的时候还要引用BS_Dev\Platform\UnitTest\_References下的dll,这个dll中主要是封装的读取XML中的数据和连接数据库的方法。三、编写测试用例代码1)首先添加AppConfig,Config文件中的内容如下:?xmlversion=1.0encoding=utf-8?configurationappSettings!--指定应用程序的名称--addkey=applicationNamevalue=Beisen.DfsClient.Test/!--指定环境为测试环境--addkey=environmentvalue=Testing//appSettings/configuration2)如果测试数据是放在XML中的要在项目中添加一个XML文件首先在项目中添加一个XML文件,但是注意更改其中的一个属性即将CopytoOutputDirectory的属性改为Copyalways,更改方法右击XML的属性然后将CopytoOutputDirectory的属性改为Copyalways(更改这里主要是因为程序中加载XML是从bin目录下加载的,这样每次在修改了XML文件的数据保存后,再把项目编译一下文件就放直接放到bin目录下了)读取XML中数据的方法如下:首先定义一个静态变量例如:privatestaticXmlDocumentDFSTest_xml;DFSTest_xml是一个变量,用来和xml文件关联再在有类初始化属性的方法中加载XML文件。[ClassInitialize()]publicstaticvoidMyClassInitialize(TestContexttestContext){DFSTest_xml=Xmlconnection.LoadXml(DFSTest.xml);DFSTest.xml自己定义的那个xml文件引用Beisen.Commmon.Test}然后是在每个测试方法中获得本测试方法下的测试数据。//加载xml文件XmlDocumentdoc=DFSTest_xml;加载上变量关联的xml文件//获得xml中的根节点XmlNoderoot=doc.GetElementsByTagName(UnitTest).Item(0);UnitTest是xml文件的根节点//获得本测试方法的节点XmlNodeListnodes=root.SelectNodes(TestStoreNoFileId);然后是for循环这个测试方法中的所有测试数据。for(inti=0;inodes.Count;i++)nodes.Count测试用例的个数{//当参数复杂的时候,要构造这个类型,构造方式参见下面的方法//XML的子节点是从0开始的DfsItemdfsItem=BuildDfsItemNoFileId(nodes[i].ChildNodes[0]);复杂对象如数组,//读取xml中的数据给参数赋值intuserId=Convert.ToInt32(nodes[i].ChildNodes[1].InnerText);stringemail=nodes[i].ChildNodes[2].InnerText;//dfsItem,userId,email是xml文件的节点读的是一个参数//调用测试方法调用的自己写的那个方法DfsPathdfsPath=Dfs.Store(dfsItem);stringtostring=dfsPath.ToString();stringclientUrl=Dfs.ToClientUrl(tostring,UrlSignDomain.Tms,userId);stringdownLoadURL=Dfs.ToDownloadUrl(tostring,UrlSignDomain.Tms,userId);ConversionFormatformat=(ConversionFormat)Convert.ToInt32(nodes[i].ChildNodes[5].InnerText);//这种适合xml中传出参数是枚举的intConversionFormatformat=(ConversionFormat)Enum.Parse(typeof(ConversionFormat),nodes[i].ChildNodes[5].InnerText;//适合Xml中传出参数是枚举的具体名称//断言预期结果与实际结果是一致的Assert.AreEqual(dfsPath.Keyspace,dfsItem.Keyspace);Assert.AreEqual(dfsPath.TenantId,dfsItem.TenantId);Assert.AreEqual(dfsPath.FileId,dfsItem.FileId);Assert.AreEqual(dfsPath.FileExtension,dfsItem.FileExtension);}//上面的那个复杂类型的方法,上面是调用的这个方法,这个方法是自己写的publicDfsItemBuildDfsItemNoFileId(XmlNodend){DfsItemdfsItem=newDfsItem(nd.ChildNodes[0].InnerText,nd.ChildNodes[1].InnerText,File.OpenRead(nd.ChildNodes[1].InnerText),Convert.ToInt32(nd.ChildNodes[2].InnerText));if(nd.ChildNodes[0].InnerText==null||nd.ChildNodes[1].InnerText==null){dfsItem=null;returndfsItem;}returndfsItem;}Xml的数据格式如下:!--保存jpg文件--TestStoreNoFileIdDfsItemFileTypeImage/FileTypeFileNameC:\ProgramFiles(x86)\CommonFiles\microsoftshared\DevServer\10.0\DSC_0251.JPG/FileNameTenantId100008/TenantId/DfsItemUserID123/UserIDEmailyangqian@beisen.com/Email/TestStoreNoFileId3)如果需要连接数据库查询时,需要在Appconfig中配置数据库的信息。connectionStringsaddname=connstringconnectionString=DataSource=10.129.8.10;InitialCatalog=BeisenTenantSecurity;UserID=qa;Password=qa;//connectionStrings查询的方法如下:DataSetds;//System.data引用ds=DBconnection.getDataset(DBconnection.createCon(1),SELECTID,Name,Alias,Status,DomainFROM[BeisenTenantSecurity].[dbo].[Tenant]whereName='+tenantCode+',Tenant);//Beisen.Commmon.Test然后在把从数据库中查询出来的数据与实际结果对比:Assert.AreEqual(tenantName,ds.Tables[0].Rows[0][Alias]);4)异常的测试还有就是对一些异常进行测试。即当传入一些不合法的参数的时候,是期望程序能够发生一些指定类型的异常的,期望发生什么异常就在typeof后面[TestMethod][ExpectedException(typeof(ArgumentNullException))]publicvoidTestStoreDfsItemsNull(){DfsItem[]dfsItems=null;Dfs.Store(dfsItems);}5)删除测试数据最后,删除测试数据。如:[ClassCleanup()]publicstaticvoidMyClassCleanup(){DBconnection.execSQL(DBconnection.createCon(1),DELETEFROMMetaObjectWHERECreatedBy=-1020);DBconnection.execSQL(DBconnection.createCon(1),DELETEFROMMetaRelationWHERECreatedBy=-1020);}6)忽略的测试当在运行所有的测试方法的时候,希望不执行某个方法的时候要在[TestMethod]下加上[Ignore]的标签,这样在运行所有测试用例的时候,就可以不运行打了标签的测试用例了。四、编写单元测试报告1)测试内容单元测试报告首先描述一下测试内容,将测试的内容大概的描述一下。2)测试方法测试中用到的方法。3)测试点测试中涉及的测试点。4)测试总结测试过程中遇到的问题总结一下。
本文标题:单元测试规范
链接地址:https://www.777doc.com/doc-2593388 .html