单元测试 模块接口测试

单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节。也是唯一需要编写代码才能进行测试的一种测试方法。在标准的开发过程中,单元测试的代码与实际程序的代码具有同等的重要性。每一个单元测试,都是用来定向测试其所对应的一个单元的数据是否正确。

一、单元测试具有一下几个好处

1、能够协助程序员尽快找到BUG的具体位置

2、能够让程序员对自己的程序更有自信

3、能够让程序员在提交项目之前就将代买变得更加健壮

4、能够协助程序员更好的进行开发

5、能够向其他程序员展现你的程序该如何调用

二、单元测试任务包括

1、模块接口测试

测试接口正确与否应该考虑下列因素

(1)、输入的实际参数与形式参数的个数是否相同;
(2)、输入的实际参数与形式参数的属性是否匹配;
(3)、输入的实际参数与形式参数的量纲是否一致;
(4)、调用其他模块时所给实际参数的个数是否与被调模块的形参个数相同;
(5)、调用其他模块时所给实际参数的属性是否与被调模块的形参属性匹配;
(6)、调用其他模块时所给实际参数的量纲是否与被调模块的形参量纲一致;
(7)、 调用预定义函数时所用参数的个数、属性和次序是否正确;
(8)、是否存在与当前入口点无关的参数引用;
(9)、是否修改了只读型参数;
(10)、对全程变量的定义各模块是否一致;
(11)、是否把某些约束作为参数传递。

(12)、文件使用前是否已经打开;
(13)、是否处理了文件尾;
(14)、是否处理了输入/输出错误;
(15)、输出信息中是否有文字性错误;

2、模块局部数据结构测试

检查局部数据结构是为了保证临时存储在模块内的数据在程序执行过程中完整、正确。局部数据结构往往是错误的根源,应仔细设计测试用例

应该考虑下列因素

(1)、不合适或不相容的类型说明;
(2)、变量无初值;
(3)、变量初始化或省缺值有错;
(4)、不正确的变量名(拼错或不正确地截断);
(5)、出现上溢、下溢和地址异常。

3、模块中所有独立执行测试

应该考虑下列因素

(1)、误解或用错了算符优先级;
(2)、混合类型运算;
(3)、变量初值错;
(4)、精度不够;
(5)、表达式符号错。

(6)、不同数据类型的对象之间进行比较;
(7)、错误地使用逻辑运算符或优先级;
(8)、因计算机表示的局限性,期望理论上相等而实际上不相等的两个量相等;
(9)、比较运算或变量出错;
(10)、循环终止条件或不可能出现;

4、模块的各条错误处理测试

应该考虑下列因素

(1)、输出的出错信息难以理解;
(2)、记录的错误与实际遇到的错误不相符;
(3)、在程序自定义的出错处理段运行之前,系统已介入;
(4)、异常处理不当;
(5)、错误陈述中未能提供足够的定位出错信息。

三、常用的测试方法

1.测试异常

可以直接对方法进行异常测试,也可以对模拟对象进行异常测试,但是,对模拟对象进行异常测试,很少用,所以,这里就介绍对方法的异常测试。请看如下代码,当用户名为空的时候,抛出异常。

例如

C# 代码   复制

public bool Valid(string userName, string passWord)

   {

       if (string.IsNullOrEmpty(userName)) throw new ArgumentNullException("userName is null");

       var isValid = userName == "admin" && passWord == "123456";

       Log.Write(userName);

       return isValid;

   }

测试代码如下

C# 代码   复制

[Test]

 [ExpectedException(typeof(ArgumentNullException))]

 public void Vaild_Throw_Test()

  {
      MyLogin l = new MyLogin();
      l.Valid("", "123456");
  }

这里需要特性“ExpectedException”,意思是期待抛出一个异常。这里不需要再进行断言了,抛出异常后,后面的代码也就不会执行了。

2.测试返回值

这里主要讲测试模拟对象的返回值。这里用到了一个LastCall的一个类,比较常用,一些辅助测试的功能,都在该类中。

测试代码如下

C# 代码   复制

[Test]

public void Valid_Return()

{
    MockRepository mock = new MockRepository();
    var log = mock.DynamicMock<ILog>();
    using (mock.Record())
    {
        log.WriteLog("admin");
        LastCall.Return(0);
    }
    var returnValue = log.WriteLog("admin");
    Assert.AreEqual(returnValue, 0);
}  

3.测试模拟对象的参数传递

当调用模拟对象时,可能需要传递参数,如果参数的值不一至时,会导致测试失败,比如:我需要传递一个字符串,其中包含了一个GUID+UserName,这里GUID可能我们无法模拟,所以,测试参数时,只需要测试UserName就可以。

方法代码如下:

C# 代码   复制

    public bool Valid_Paramter(string userName, string passWord)

    {
        Log.Write(Guid.NewGuid() + userName);
        return userName == "admin" && passWord == "123456";
    }

测试代码如下:

C# 代码   复制

[Test]

 public void Valid_Paramter()

 {
     MockRepository mock = new MockRepository();
     var log = mock.DynamicMock<ILog>();
     using (mock.Record())
     {
         log.Write("admin");
         LastCall.Constraints(Rhino.Mocks.Constraints.Text.Contains("admin"));
     }

     MyLogin login = new MyLogin();
    login.Log = log;
    var valid = login.Valid_Paramter("admin", "123456");
    Assert.AreEqual(valid, true);
    mock.VerifyAll();
 }
时间: 2024-11-04 19:42:07

单元测试 模块接口测试的相关文章

大前端的自动化工厂(5)—— 基于Karma+Mocha+Chai的单元测试和接口测试

一. 前端自动化测试 大多数前端开发者对测试相关的知识是比较缺乏的,一来是开发节奏很快,来不及写,另一方面团队里也配备了"人肉测试机",完全没必要自己来.但随着项目体量的增大,许多人维护同一份代码,经常会出现有些函数莫名其妙地结果不对了,或者某个接口的入参变了,又或者哪位大哥把后端返回的数据结构给改了.每天工作的时间里被拉来拉去帮人定位问题,结果花了很多时间却发现大部分都是别人的锅.每当遇到项目上线,那就更热闹了,跟着其他"人肉测试机"大家一起点点点...... 很

【转】单元测试、接口测试、功能测试的区别

先来看看功能测试如何进行的:编写测试用例,测试用例当中最主要的是测试步骤和预期结果:测试人员根据测试用例执行操作步骤,然后通过眼睛和思考判断实际结果与预期结果是否相等.如果相等,测试通过:如果不相等,测试失败. 自动化测试要做的事情与功能测试是一致.这里的自动化主要包含三个层面的自动化,单元测试自动化,接口测试自动化和web测试自动化.当然,不同层面的自动化关注点是不一样的. 单元测试自动化,调用被测试的类或方法,根据类或方法的参数,传入相应的数据.然后,得到一个返回结果.最终断言返回的结果是否

python单元测试模块

1.函数测试 import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): """测试name_function.py""" def test_first_last_name(self): """能够正确地处理像Janis Joplin这样的姓名吗? ""&q

python中的单元测试模块unittest

unittest的属性: 该文以思维导图的形式描述unittest的重要属性. 其中前四个是unittest最核心的三个属性. testcase:测试用例: testsuite:测试套件,多个测试用例组成一个测试套件: test runner:执行测试用例,该类中的run()方法会执行testsuite/testcase中的run()方法.测试的结果会保存在testresult中. 还有一个很重要的就是fixture,看着是挺陌生的,其实就是一个测试用例执行之前环境的准备和执行之后环境的销毁.

yaml模块管理用例,单元测试

1.yaml 可以用来做数据驱动,比较灵活 import yaml #用来读配置文件的比如file文件 文件以yaml和yml结尾 这种格式写用例比较容易处理,字典方便取值 取不到就没有不报错,主要是灵活. f = open('login.yaml',encoding='utf-8')res = yaml.load(f) #加载读出文件 将键值对转化为字典print(res) 比如:login.yml - #是list的写法 可以防止字典相同的key覆盖 url : /api/user/logi

接口测试实践

接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等. --百度百科 为什么介绍接口测试? 接口常被开发挂在嘴边,在开发过程中无处不在,但对于测试人员来说,它又如此朦胧,无形无色无味,难以触碰.相信这也是测试人员比较难理解的一种测试类型.查询的大部分资料都是介绍一堆模糊的概念.所以,我打算以浅薄的认知来介绍接口测试,当然会举例子. 我所知道的接口测试

软件测试 - 接口测试简介

接口测试简介 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等,保证对外提供接口的正确性和健壮性. 接口测试分类 1.代码接口测试(模块间接口测试) 例如:java中的interface接口 2.协议间接口测试 协议是指通信双方实现相同功能的相应层之间的交往规则 例如:web测试中的http协议接口.socket协议接口测试.telnet协议接口测试 3.

【转】使用 Jmeter 做 Web 接口测试

最近总结了一下在接口测试方面的知识与心得,在这里与大家分享一下,如有说的不对的地方请多多指正. 接口测试概述 定义 API testing is a type of software testing that involves testing application programming interfaces (APIs) directly and as part of integration testing to determine if they meet expectations for

JMeter——使用 Jmeter 做 Web 接口测试

接口测试概述 定义 API testing is a type of software testing that involves testing application programming interfaces (APIs) directly and as part of integration testing to determine if they meet expectations for functionality, reliability, performance, and se