• 关于单元测试~~~


    单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
    在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在像C++这样的,面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。
    经常与单元测试联系起来的另外一些开发活动包括代码走读(Code review),静态分析(Static analysis)和动态分析(Dynamic analysis)。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。
    这是使用visual studio2013进行单元测试的一些日记~~
    (转载自zhoumy)

    1.打开VS2013 --> 新建一个项目。这里我们默认创建一个控制台项目。取名为UnitTestDemo

    2.在解决方案里面新增一个单元测试项目。取名为UnitTestDemoTest

    创建完毕后项目结构大概如下:

     

    3.进入控制台项目UnitTestDemo的Program类,创建一个Add方法。

    复制代码
    namespace UnitTestDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
            }
    
            public static int Add(int num1, int num2)
            {
                return num1 + num2;
            }
        }
    }
    复制代码

    4.我们的目的就是测试上面的Add方法运行是否正常,返回结果是否正确。

    5.在单元测试项目中引用控制台项目,引用完毕后项目结构如下:

     

    6.单元测试项目里面UnitTest1这个类的名字取得太难看了,我们把名字改为ProgramTest,表明这是在测试Program类。改完如下:

     
    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace UnitTestDemoTest
    {
        [TestClass]
        public class ProgramTest
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
     

    7.上面就是VS为ProgramTest类默认生成的方法。可以看到ProgramTest具有一个【TestClass】特性,表明这是一个测试类。TestMethod1具有一个【TestMethod】特性,表明这是一个测试方法。

     

    8.可以这样理解,一个方法必须具有【TestMethod】特性,且其所属的类具有【TestClass】特性,那么这个方法才会被VS承认为一个【单元测试方法】。

    如果没有上面的两个特性中的一个,编译生成是没有任何问题的。但是VS不会把其作为一个【单元测试方法】。

     

    9.“VS不把一个方法作为【单元测试方法】”是什么意思呢?

    依次点击VS的菜单栏【测试】--> 【窗口】-->【测试资源管理器】,可以打开测试资源管理器。

     

     

    10.测试资源管理器里面会显示当前解决方案里面的所有单元测试。说明白点就是这里只显示符合【第8点】要求的方法。

    你可能会说,为什么上面的图里面什么都没显示,【TestMethod】特性和TestClass】特性现在不是都有吗?

    原因是你还没有生成程序集。OK,按F6.就可以看到【测试资源管理器】中显示了【TestMethod1】:

     

    11.我们要清楚我们创建单元测试的初衷:是用工具帮助我们测试软件的质量、稳定性、性能等等。【VS】在这里就充当了工具的作用。

     

    12.回到命名的问题,很明显TestMethod这个名字太难看了,我们把它改成AddTest表示这是在测试Add方法。

     
    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace UnitTestDemoTest
    {
        [TestClass]
        public class ProgramTest
        {
            [TestMethod]
            public void AddTest()
            {
            }
        }
    }
     

    13.截止目前,我们已经建立了一个可以执行的测试框架,虽然没有起到什么作用,但是测试已经可以执行了。

    执行测试的方法之一是:右键点击需要测试的【单元测试】方法的名称,选择运行:

     

    运行测试之后,可以在测试资源管理器中查看测试的结果:

     

    执行单元测试的方法有很多,这些需要我们在不断的学习中去体会。

     

    14.接下来我们做一点有意义的事情。改进AddTest方法:

     
    using System;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace UnitTestDemoTest
    {
        [TestClass]
        public class ProgramTest
        {
            [TestMethod]
            public void AddTest()
            {
                int num1 = 100;
                int num2 = 200;
    
                Assert.AreEqual(Program.Add(num1, num2), 300);
            }
        }
    }
     

    在这之前,请把Program类的可见性改为internal或者Public。

    ​15.“Assert”之前没接触过单元测试的朋友,或者英语差点的可能不认识。上谷歌翻译:

    清楚的看到,“Assert”的意思是“断言”。所以“Assert.AreEqual(Program.Add(num1, num2), 300);”这句话的意思就是:我断言“Program.Add(num1, num2)”的结果就是300。

    而断言的正确与否只需要通过测试工具测试即可。如果测试通过说明此断言是正确的,反之就说明这个测试失败了。

    断言有很多种,包括上面普通的Assert,还有字符串断言,集合断言等等。

    16.ok,运行测试可以看到测试通过。

     

    17.如果上面所说的你都明白,那么到这里为止,你可以自己编写简单的单元测试代码并执行测试了。

    最后还有一个要说的就是,如果你觉得手动编写单元测试类和方法太麻烦,那么可以使用“Unit Test Generator”插件帮助你生成单元测试和方法。

    这样你可以把重心偏到编写测试逻辑上。

    “Unit Test Generator”可以通过VS菜单栏【工具】-->【扩展和更新】-->搜索““Unit Test Generator””取得。

     

    18.安装“Unit Test Generator”需要重启VS。

    在需要进行单元测试的类和方法上点击右键,如图操作(图中演示的是生成单元测试方法)

     

     

    点击之后会弹出一个对话框,需要你配置一个名称的规则,配置好后点击ok即可生成测试方法。

    19.最后希望大家养成随时测试代码的好习惯。

     

    下次再见咯~~

  • 相关阅读:
    restframework 使用OrderingFilter实现排序
    restframework 使用django_filters 实现过滤
    Serializer 嵌套使用
    docker 运行scrpyd
    flutter-lol云顶之弈助手app
    微信小程序上传多张图片,后端只保存了最后一张的Bug
    ettercap局域网arp欺骗,轻松窃密
    GoLang邮件发送Demo(继上篇msmtp)
    Mac下命令行发邮件【搭配php(shell_exec...)等脚本语言,轻松发邮件,告别各种依赖库】
    我的第一个RN应用(漂亮的首页和笑话列表)
  • 原文地址:https://www.cnblogs.com/baobaoni/p/4458191.html
Copyright © 2020-2023  润新知