使用MS Test做单元测试

摘要:
过了几天后,师傅问我单元测试完成了吗?师傅让我把单元测试的代码提交到服务器上,他想Review一下!单元测试应该是由开发者来完成的。

声明:本篇博客翻译自:http://www.c-sharpcorner.com/article/unit-testing-with-ms-tests-in-c-sharp/

写在翻译之前:

依然清晰的记得刚工作的第一个项目中,在完成一个功能模块开发后,师傅让我把代码做一下单元测试。当时一脸“懵懂”。心里的疑惑油然而生,测试不应该是测试人员做的吗?然后就写了一些测试用例把功能简单过了一遍。过了几天后,师傅问我单元测试完成了吗?我很自信的告诉师傅搞定了。师傅让我把单元测试的代码提交到服务器上,他想Review一下!我更加疑惑了,对师傅说,单元测试还要写代码呀?:(

前言:

很多初级开发工程师都会有这样的困惑:谁应该来做单元测试。单元测试应该是由开发者来完成的。

单元测试:

通过一些代码来测试一个方法/函数的行为。

使用MS Test做单元测试第1张

为什么需要单元测试:

  • 通常情况下,一个软件项目会长期运行/维护/更新,这个时间至少也会有5年的时间;
  • 在这期间,维护这个程序非常重要;
  • 任何一个代码的改动都有可能会影响程序的其他功能模块;
  • 因此在更新程序之间,会需要做大量的回归测试(Regression Testing),这将花费测试工程师大量的时间。

想象一下如果代码修改需要非常频繁,那么花费在回归测试上的精力会非常多,同样的,也会有很大的几率捕捉到功能回退(修改缺陷)的问题。

回归测试:

使用MS Test做单元测试第2张

回归测试是确保当增加了新的修改后,老的功能依旧可以正常使用。

单元测试:

使用MS Test做单元测试第3张

  • 单元测试将会最小化回归测试的范围:
  • 每一个方法/函数都会被一系列的测试方法覆盖,这些测试方法将测试真实方法的功能;
  • 测试方法会检查下面的场景/行为:
    • 成功/正常流程
    • 失败
    • 异常/错误处理
  • 一个方法可能需要多个测试方法,这取决于测试方法的复杂度;
  • 在代码交付之前,开发者需要确保所有的测试方法均运行通过

TDD:

使用MS Test做单元测试第4张

在写产品代码之前先写单元测试代码,然后使用产品代码来填充/覆盖测试代码。最终使测试代码都运行通过。

编写测试用例:

在C#中有2个测试框架

我们使用AAA模式来编写单元测试

使用MS Test做单元测试第5张

  1. 安排所以必须的前置条件和输入;
  2. 在测试代码中操作被测试对象和方法;
  3. 断言期待的结果;

右击解决方案浏览器,选择UnitTestProject并添加:

使用MS Test做单元测试第6张

Employee类:

    public class Employee
    {
        public string GetName(string firstName, string lastName)
        {
            return string.Concat(firstName, " ", lastName);
        }
    }

单元测试类:

    [TestClass]
    public class EmpoyeeFunctionalTest
    {
        [TestMethod]
        public void GetNameTest()
        {
            // Arrange
            Employee employee = new Employee();
            string firstName = "Jimmy";
            string lastName = "Yang";
            string expacted = "Jimmy Yang";
            string actual = string.Empty;
            // Act
            actual = employee.GetName(firstName, lastName);
            // Assert
            Assert.AreEqual(expacted, actual);
        }
    }

希望上述内容能够帮助你对单元测试有一个概念性的认识。

感谢您的阅读!翻译的不到位之处还望指正。谢谢~

免责声明:文章转载自《使用MS Test做单元测试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇拥有心动的jmeter图表报告[Linux实用工具]Linux监控工具munin的安装和配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

webpack打包(1)

Webpack可以处理js/json资源。生成环境比开发环境具有更多的功能来压缩代码。它可以将ES6模块化为浏览器在webpack.config中识别的模块操作命令npmiwebpackwebpack-cli-g npminit npmiwebpack-cli-D配置并运行webpack以将webpack.config.js文件打包...

配置nginx

aNULL:!MD5:!...

MySQL 字段类型占用空间

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。)1或2个字节,取决于枚举值的个数SET(‘value1’,’value2’,…)1、2、3、4或者8个字节,取决于set成员的数目上表的M只是为了说明占用空间大小,在实际创建表中char、varchar,20指的是字符而不是字节;那么字符和字节的转换要看字符集,utf-8下,1字符=3...

json文件 乱码问题 根本解决办法

1工具→ 定制2单击命令选项卡;3选择上部单选区域中的菜单栏,然后从下拉列表中选择文件;4单击“添加”命令5,在类别中查找文件,找到右侧的高级保存选项,然后单击“确定”6,通过向下移动来调整“文件”菜单中选项的位置。如果你有任何问题,请留言!...

海康、大华网络摄像机RTSP URL格式组成及参数配置

1.海康相机在IE浏览器中输入网络摄像头的IP地址,输入配置的用户名和密码,然后登录:视频:1。比特率类型:主流和子流,主流支持的分辨率相对较高;2.视频类型:如果需要音频和视频,则选择“复合流”;如果只需要视频,则选择“视频流”;3.分辨率设置不重复;4.码率类型:代码更改率!!!...

FoxMail 7.2的邮件存储目录修改

在FoxMail升级到7.x之后,邮件的存储路径和策略也发生了变化。许多朋友想更改FoxMail 7.2邮件的位置,因为他们担心重新安装系统时会占用磁盘C上的空间或丢失邮件。但是,FoxMail设置界面中没有提供相应的功能。我们该怎么办?同样,如果您想将邮件存储在磁盘D上,则需要执行以下操作:1.退出运行FoxMail,而不重新安装它。...