C# 软件开发之单元测试

这篇具有很好参考价值的文章主要介绍了C# 软件开发之单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在日常开发中,一般通过启动调试或运行程序来查看功能是否符合预期,如果不符合预期,则需要优化程序,再次运行,如此反复,直到程序的输出符合预期需求为止。随着程序的不断复杂化,某些功能的测试也变得越来越复杂,可能为了验证一个很小的改动项,就需要操作很多步骤,才能验证成功,如果验证不成功,则需要多次重复验证,这对于开发者来说,将大大的拖延了开发进度。如何才能将复杂的功能进行拆分,每一个都可以单独进行验证呢?如果其他的功能没有问题,则只需要验证修改的那部分内容即可,这就是本篇文章需要介绍的单元测试。通过创建和运行单元测试,检查代码是否按预期工作。

c#测试学习,.Net技术,c#,单元测试,log4j

什么是单元测试?

单元测试,是指对软件中的最小可测试单元进行检查和验证。至于如何裁定最小可测试单元,则需要根据实际情况进行分析,一般情况下,一个类,一个函数,一个页面,一个按钮事件,都可以作为一个测试单元。总的来说,单元就是人为规定的最小的被测功能模块。对这些模块进行的测试,就称之为单元测试。

单元测试的好处?

通过单元测试,可以尽早的发现程序的BUG,便于后期的开发及调试,维护。可以使得程序更加健壮,我们对自己的代码也更加有信心,也便于问题的排查与定位。

单元测试环境

本示例主要基于以下环境进行单元测试:

  1. 开发工具:Visual Studio 2022
  2. 开发目标平台:.NET 6.0

创建目标项目

首先创建一个控制台应用程序DemoOne,步骤如下所示:

项目模板选择控制台项目,然后进入配置新项目页面,输入项目名称,点击下一步,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

选择目标框架,.NET 6.0(长期支持),并勾选不使用顶级语句,然后点击创建,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

创建成功后,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

创建功能类

我们有如下一个功能类Calculator,实现两个整数的加,减,乘,除,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace DemoOne
{
    /// <summary>
    /// 实现整数的加减乘除
    /// </summary>
    public class Calculator
    {
        public int Add(int x, int y)
        {
            return x + y;
        }
 
        public int Sub(int x, int y)
        {
            return x - y;
        }
 
        public int Multiply(int x, int y)
        {
            return x * y;
        }
 
        public int Divide(int x, int y)
        {
            return x / y;
        }
    }
}

 

创建单元测试项目

在解决方案名称上,点击右键菜单,添加新建项目,然后选择NUnit测试项目,然后点击下一步,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

输入项目名称DemoOne.Test,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

选择目标测试框架.NET 6.0(长期支持),然后点击创建,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

创建成功后的项目,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

添加项目引用并创建测试类

在DemoOne.Test项目中,添加DemoOne项目引用,并创建CalculatorTest测试类,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace DemoOne.Test
{
    public class CalculatorTest
    {
        [Test]
        public void TestAdd()
        {
            var calculator=new Calculator();
            int a = 10;
            int b = 8;
            int c = calculator.Add(a, b);
            Assert.AreEqual(c, 18);
        }
 
        [Test]
        public void TestSub()
        {
            var calculator = new Calculator();
            int a = 10;
            int b = 8;
            int c = calculator.Sub(a, b);
            Assert.AreEqual(c, 2);
        }
 
        [Test]
        public void TestMultipy()
        {
            var calculator = new Calculator();
            int a = 10;
            int b = 8;
            int c = calculator.Multiply(a, b);
            Assert.AreEqual(c, 80);  
        }
 
        [Test]
        public void TestDivide()
        {
            var calculator = new Calculator();
            int a = 10;
            int b = 8;
            int c = calculator.Divide(a, b);
            Assert.AreEqual(c, 1);
        }
    }
}

 

注意:其中方法上方添加[Test]表示此方法是一个单元测试方法。

测试资源管理器

在VisualStudio中,单击测试(S),选择测试资源管理器(Ctrl+E,T),打开测试资源管理器窗口,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

在资源管理器窗口,可看到刚刚创建的4个单元测试,且处于未运行状态。点击测试资源管理器中的运行按钮,即可运行单元测试,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

运行成功后,可以看到单元测试的运行结果。如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

单元测试异常输出

通过修改单元测试中除法的代码,如下所示:

[Test]
public void TestDivide()
{
	var calculator = new Calculator();
	int a = 10;
	int b = 0;
	int c = calculator.Divide(a, b);
	Assert.AreEqual(c, 0);
}

 

 在上述代码中,被除数为0,会抛出异常,再次运行单元测试,则会运行不通过,并提示错误信息,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

 经过单元测试后,发现被除数为0时抛出异常,则需要优化代码,经过优化后的代码,如下所示:

public int Divide(int x, int y)
{
	if (y == 0)
	{
		return 0;
	}
	else
	{
		return x / y;
	}
	
}

 

优化成功后,再次运行单元测试,如下所示:

c#测试学习,.Net技术,c#,单元测试,log4j

 以上示例,也从另外一个方面说明了,通过单元测试,可以使我们的程序,更加健壮。

Assert断言

在上述代码示例中,使用到了Assert.AreEqual方法,判断两个数是否相等。常用的有:

  1. Assert.IsTrue 判断是否为真
  2. Assert.IsFalse 判断是否为假
  3. Assert.AreEqual 判断是否相等。

Assert还有很多方法,本文不再一一列举,具体可参考:

https://learn.microsoft.com/zh-cn/dotnet/api/microsoft.visualstudio.testtools.unittesting.assert?view=visualstudiosdk-2022

以上就是C#软件开发之单元测试的全部内容。希望可以抛砖引玉,一起学习,共同进步。文章来源地址https://www.toymoban.com/news/detail-770003.html

到了这里,关于C# 软件开发之单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Soft:软件开发的简介(敏捷开发等6大软件开发模式)、软件测试的简介(单元测试/集成测试/系统测试/验收测试/回归测试、黑白灰功能测试、DEV等四套环境)、运维的简介之详细攻略

    Soft:软件开发的简介(敏捷开发等6大软件开发模式)、软件测试的简介(单元测试/集成测试/系统测试/验收测试/回归测试、黑白灰功能测试、DEV等四套环境)、运维的简介之详细攻略 目录 1、软件开发(敏捷开发等6大软件开发模式) Computer:敏捷开发Scrum方法的简介、发展历程、开

    2024年02月04日
    浏览(53)
  • Java开发手册之单元测试,软件测试端简单易用的SPI框架

    Java开发手册之单元测试,软件测试端简单易用的SPI框架

    【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。 B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C:Correct,正确的输入,并得到预期的结果。 D:Design,与设计文档相结合,来编写单元测试。 E:Error,强制错误信息输

    2024年04月25日
    浏览(16)
  • 自己开发jlink烧录软件,烧录上位机, C#调用JLinkARM.dll实现软件烧录

    自己开发jlink烧录软件,烧录上位机, C#调用JLinkARM.dll实现软件烧录

    最近需要写一个烧录软件,让工厂可以实现一键烧录。 这里实现了运行一个bat文件进行一键烧录,不想看这部分的可以直接跳到第二部分,不受影响。 由于jlink的自带烧录软件JFlash.exe操作十分繁杂,需要自己开发一个简洁的烧录方法,一番操作发现,可以使用J-Link Commander

    2024年04月11日
    浏览(16)
  • C#学习笔记3-函数与单元测试

    现在开始参考书籍变为:《C# 12 and .NET 8 – Modern Cross-Platform Development.Mark Price》 Writing, Debugging, and Testing Functions 写函数 Debug 运行时 logging 单元测试 一个有着 XML 注释的函数 这里直接举一个例子: Numbers that are used to count are called cardinal numbers(基数), for example, 1, 2, and 3. Wher

    2024年01月18日
    浏览(9)
  • 软件测试/测试开发丨Jenkins Pipeline 学习笔记

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26711 内建节点 SSH节点 Java Web节点 1.1.1 SSH节点配置 远程工作目录 节点中必须有该目录,用于下载和运行jenkins 主机 节点的ip 1.1.2 Java Web节点配置 全局安全配置 代理:勾选Java代理协议 没有负载监

    2024年02月09日
    浏览(31)
  • 软件测试/测试开发丨测试用例自动录入 学习笔记

    软件测试/测试开发丨测试用例自动录入 学习笔记

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27139 省略人工同步的步骤,节省时间 兼容代码版本的自动化测试用例 用例的执行与调度统一化管理 收集用例 录入平台 通过命令行提供的收集用例功能,获取用例信息后,编写解析算法–比较

    2024年02月09日
    浏览(13)
  • 软件测试/测试开发丨Pytest和Allure报告 学习笔记

    软件测试/测试开发丨Pytest和Allure报告 学习笔记

    本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/26755 类型 规则 文件 test_开头 或者 _test 结尾 类 Test 开头 方法/函数 test_开头 注意:测试类中不可以添加 __init__ 构造函数 注意:pytest对于测试包的命名没有要求 方法:类中定义的函数 函数:类

    2024年02月10日
    浏览(32)
  • 软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

    软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

    ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中,沟通本来就是很重要的一门课程,沟通的过程中表达越清晰,给到的信息越多,那么 沟通就越顺畅 。 和 ChatGPT 沟通也是同样的道理,如果想要ChatGPT给到的信息越准确,越清晰,和它的沟通就至关重要

    2024年02月09日
    浏览(17)
  • 软件测试/测试开发/全日制|学习使用Elasticsearch进行全文检索

    软件测试/测试开发/全日制|学习使用Elasticsearch进行全文检索

    霍格沃兹测试开发学社推出了《Python全栈开发与自动化测试班》。本课程面向开发人员、测试人员与运维人员,课程内容涵盖Python编程语言、人工智能应用、数据分析、自动化办公、平台开发、UI自动化测试、接口测试、性能测试等方向。 为大家提供更全面、更深入、更系统

    2024年01月21日
    浏览(15)
  • .net 软件开发模式——三层架构

    .net 软件开发模式——三层架构

    三层架构是一种常用的软件开发架构模式,它将应用程序分为三个层次: 表示层、业务逻辑层和数据访问层 。每一层都有明确的职责和功能,分别负责用户交互、业务处理和数据存储等任务。这种架构模式的优点包括易于维护和扩展、更好的组织结构和代码重用性、更高的

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包