模块接口测试

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

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

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;

   }

测试代码如

复制代码
[Test]

 [ExpectedException(typeof(ArgumentNullException))]

 public void Vaild_Throw_Test()

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

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

2.测试返回值

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

测试代码如下

复制代码
[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就可以。

方法代码如下:

复制代码
  public bool Valid_Paramter(string userName, string passWord)

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

测试代码如下:

复制代码
[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();
 }

2023最新Jmeter接口测试从入门到精通(全套项目实战教程)

相关推荐
forestsea4 天前
分布式日志治理:Log4j2自定义Appender写日志到RocketMQ
java·log4j·java-rocketmq
遥不可及~~斌6 天前
Spring Boot 项目日志系统全攻略:Logback、Log4j2、Log4j与SLF4J整合指南
spring boot·log4j·logback
weixin_438335407 天前
SpringBoot依赖冲突引发的 log4j 日志打印问题及解决方法
spring boot·单元测试·log4j
我是坑货8 天前
maven的项目管理和构建生命周期
java·log4j·maven
凭君语未可16 天前
详解Maven的主要生命周期
java·log4j·maven
WIN赢17 天前
单元测试的编写
单元测试·log4j
zerohawk20 天前
【log4j】配置Slf4j
junit·单元测试·log4j
熬了夜的程序员22 天前
Go 语言封装邮件发送功能
开发语言·后端·golang·log4j
故事与他64524 天前
Apache中间件漏洞攻略
java·服务器·安全·网络安全·中间件·log4j·apache
江沉晚呤时1 个月前
精益架构设计:深入理解与实践 C# 中的单一职责原则
java·jvm·算法·log4j·.netcore·net