• 0
  • 0
分享
  • 建一个简单的单元测试实例(MSTest框架)——软件测试圈
  • 北极 2021-07-12 10:36:31 字数 2893 阅读 2199 收藏 0

背景

最近在看单元测试,因为公司要求使用语言为C#,所以探索了一下微软自带的一个单元测试框架MSTest,研究了半天终于跑通了,决定记下来,供自己日后参考

单元测试简介

所谓单元测试(unit testing),就是开发者编写的一小段代码,用于对软件中的最小单元进行检查和验证,其一般验证对象是一个函数或者一个类。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。

所用环境

VS2019

MSTest

一个实例

1. 创建一个被测项目

1、首先需要一个被测项目,进入VS2019, file -> new ->project,选择 Console App(.net Core),如下图,点击next,create,一路创建就可以

1.jpg

2、打开项目中的.cs文件,可以看到他自动生成了一些代码,直接用下面的简单程序代码替换掉就可以

这个程序就是一个简单的整数相加,下面是代码片 。

using System;
namespace Demo
{
    public class Add
    {
        public int two_number(int a, int b)
        {
            return a + b;
        }
    }
    class TestWork
    {
        static void Main(string[] args)
        {
            Add add = new Add();
            
            Console.WriteLine(add.two_number(10, 10));
        }
    }
}

2.jpg

2. 创建一个测试项目

接着需要一个测试项目,在解决方案中添加一个新项目,选择 MSTest Test Project(.net Core),如下图,点击next,create,一路创建就可以

3.jpg

4.jpg

3. 引用

此时已经创建好了被测项目和测试项目,接着要将他俩关联起来

右击测试项目,Add -> Project Reference

5.jpg

勾选上面创建好的被测项目,点击OK

6.jpg

此时可以看到测试项目下的.cs文件中有一些内容,直接用下面的代码片替换即可

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Demo;
namespace UnitTestProject2
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void two_number()
        {
            int a = 10;
            int b = 20;
            Assert.AreEqual(30, new Add().two_number(a, b));
        }
    }
}

7.jpg

4. 执行测试

引用好之后,就可以执行测试了,上面的测试类中写了一个测试方法,就代表是一条用例,在测试方法的代码编辑窗口,右击,点击Run Test 即可执行测试

8.jpg

会弹出测试窗口,窗口中显示测试结果,第二个就是我们在执行的测试类,可以看到,一条用例已经通过

9.jpg

5. 通过代码直接生成测试用例类

上述2-3步骤,是属于手动创建测试项目并引用的,但其实VS2019是提供了通过代码直接生成单元测试用例类的,只需要修改相关的用例即可,这样操作更快也更方便

还是以上面创建的被测项目为例,进入被测项目.cs文件编辑窗口,右击,选择 Create Unit Tests,点击OK即可

10.jpg

11.jpg

6. 测试用例的写法

说完了创建单元测试的大框架,现在来说一下测试用例的写法

原则上一个测试方法就代表一条测试用例,测试用例的构成有三部分:准备 执行 断言

先简单解释一下,下面用代码举例说明:

arrange 准备部分 初始化对象并设置传递给待测试方法的数据

act 执行部分 调用具有准备参数的待测方法

assert 断言部分 验证预期和实际结果是否相同

[TestMethod()]
        public void two_numberTest(int a, int b)
        {
            // arrange
            int a = 10;
            int b = 20;
            // act 
            int res = new Add().two_number(a, b);
            // assert
            Assert.AreEqual(a + b, res);
        }

7. 参数化

假如有好多个测试用例,只有传参不同,一个一个写测试方法会有点太过麻烦,所以MSTest提供了参数化方法 [DataRow(参数列表)],还是以代码为例,虽然只写了一个测试方法,但是其实是4个用例

可以执行一下看看结果,可以看到多条用例的参数和执行结果

[TestMethod()]
        [DataRow(10, 0)]
        [DataRow(10, -20)]
        [DataRow(-10, -20)]
        [DataRow(10, 20)]
        public void two_numberTest(int a, int b)
        {
            Assert.AreEqual(a + b, new Add().two_number(a, b));
        }

12.jpg

8. 设置超时

由于网络或者数据、性能等各种原因,有时候我们需要给测试方法设置一个超时时间

MSTest有两种方式设置超时时间

[Timeout(2000)]   // 设置超时, 单位为毫秒,可以自己设置时间
[Timeout(TestTimeout.Infinite)]    // 将超时时间设置为允许的最大值,有一个固定的值,去到定义中可以看到

13.png

9. 调试

程序出现问题我们会去调试,单元测试没通过也可以进行调试,由于和编写代码调试大同小异,故只简单叙述步骤

  1. 在想要调试的测试方法行中打断点

  2. 在测试资源管理器中选择测试方法,右击,选择Debug即可

    14.jpg

  3. 进入调试模式

F5 继续。

F10 执行下一行代码,但不执行任何函数调用。

F11 在执行进入函数调用后,逐条语句执行代码。

Shift + F11 执行当前执行点所处函数的剩余行。

Shift + F5 停止运行程序中的当前应用程序。可用于“中断”模式和“运行”模式。


作者:run_bear

原文链接:https://blog.csdn.net/run_bear/article/details/116641314

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   互联发展是很快的,每年都会有新语言的诞生。  西瓜我,干测试已经三年了,主要负责web功能测试,java编写接口自动化,APP功能测试,APP 接口自动化(也是用的java),面过得测试也差不多30个,我主要会问技术相关和项目相关的问题来判断面试者以下几个能力:  1.语言沟通能力  2.技术过不过关  3.项目的真实性  所以我先讲面试经过,各位看官可以总结点经验:  一.面试的自我介绍  我有时候忙得来不及看简历,所以我一般会让面试者来个自我介绍,先了解一下是什么样的人,有哪些优势,然后是工作经验。  面试者会出现以下几种现象:  1.吐词不清晰;  2.说话断断续续,如果说话一段一段...
            0 0 1507
            分享
          •   测试圈子生态的思考  其实测试的生态,说起来蛮简单的,一个词语概括就是两极分化。有个梗:hand hands,load loads,太贴切了。  两极分化这个词,可以从下面三个维度来看:  薪资  我认识的测试也算不少,月薪上下限从8k到55k不一而足;从年薪角度来说,package10W到100W+的都有,我这里指的是单纯的技术岗位,不算管理岗在内。  而且有个特别有意思的点,绝大多数测试,薪资的天花板就是30K,对应年薪50W以内。这里的绝大多数,我可以给一个用户画像:  工作经验:5-10年;   第一学历:大专-本科;   技术能力:会写点自动化代码,工具仅限于使用,不提造轮子,能...
            0 0 1516
            分享
          •   软件测试是个需求多,就业机会大的职业。目前,我国具备软件测试能力的人员数量和市场需求相差巨大,巨大的市场空缺,使软件测试工程师从初级到高级,只需要 1 年甚至更短的时间来完成。所以作为一名软件测试工程师,未来的发展空间是非常广阔的。  不过高薪意味着这个行业并不好做,它需要掌握的知识太多了。而且目前市场在要求广泛的同时,也开始慢慢细化,越来越强调专向发展。软件测试覆盖的领域很广,比如网站测试、手机测试、应用软件测试等等。  未来,你需要先明确今后的职业发展,再深入学相应的知识。  盘点软件测试的细分岗位  1.走技术路线: 功能测试工程师,自动化测试工程师,性能测试工程师,安全测...
            0 0 1361
            分享
          • 上期我们简单介绍APP测试 与web测试区别,本期我们将介绍APP测试中涉及的各种测试策略,以及后期将对各种测试策略进行逐一讲解。APP测试主要分为6种不同的测试策略,分别是功能测试、兼容适配测试、性能测试、安全测试、专项测试以及稳定性测试。首先我们一起来看看APP测试中的功能测试。不管是任何类型的测试,功能测试都是必须要进行,只有保证功能正常才可以进行后续各种测试,功能测试依然是围绕着需求进行。APP的 功能测试主要从以下几个方面进行:安装卸载测试、升级测试、业务逻辑测试、UI测试、异常测试。1. 安装卸载测试:在测试APP之前,首先就要进行APP的安装。而对安装测试进行测试用例设...
            0 0 1039
            分享
          •   一.接口测试分析  外部接口:  测试被测系统和外部系统之间的接口。  内部接口:  · 内部接口只提供给内部系统使用  · 内部接口提供给外部系统使用  二.接口测试的流程及用例的设计  1、根据接口api文档(或可通过抓包工具获取),熟悉接口业务,接口地址,鉴权方式,接口入参出参及错误码。  2、编写接口用例。  思路  正常情况:输入正常入参,接口能够成功返回数据。  异常情况:  · 异常鉴定:鉴权码为空,鉴权码错误,鉴权码过期,鉴权码失效...  · 输入异常:输入为空,输入类型异常,输入长度异常  · 错误码覆盖:根据业务而定  · 其他...
            0 0 936
            分享
      • 51testing软件测试圈微信