VisualStudio2019,基于.NET Framework的单元测试


来了来了,她带着基于.NET Framework的单元测试笔记来啦~

VisualStudio2019,基于.NET Framework的单元测试_第1张图片


三个W一个H走起来

一、what?单元测试是什么?

单元测试就是单元测试啊,只可意会不可言传。
VisualStudio2019,基于.NET Framework的单元测试_第2张图片
怎么说呢?就是对你自己代码中写的方法类进行测试,不运行程序的情况下测试自己的逻辑是否正确,返回的内容是否符合预期。

百度搜一搜很多解释啦~来,跟着我读:单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证…
VisualStudio2019,基于.NET Framework的单元测试_第3张图片


莫不是要上天?
VisualStudio2019,基于.NET Framework的单元测试_第4张图片


二、where?how?在哪里?如何创建单元测试?

关于单元测试的建立和项目的引用,可以分为三种情况来说一下。

1、新建web应用程序时一起创建单元测试项目

  • 新建一个web应用程序【subject_with_unittest】——如下图,勾选一起创建一个单元测试

VisualStudio2019,基于.NET Framework的单元测试_第5张图片

  • 最后的结构如下
    在单元测试的项目中,自动引用了web应用程序项目
    VisualStudio2019,基于.NET Framework的单元测试_第6张图片

  • 右键自动引用的subject_with_unittest,查看它的属性,可以看到它的路径如下图
    VisualStudio2019,基于.NET Framework的单元测试_第7张图片

2、单独的单元测试项目中引用web应用程序

  • 单独建立一个单元测试项目,命名【UnitTestProject_alone】
    VisualStudio2019,基于.NET Framework的单元测试_第8张图片

  • 看以看到,新建的独立的单元测试项目,引用中仅有一些所需的服务项目的
    VisualStudio2019,基于.NET Framework的单元测试_第9张图片

  • 在单元测试项目中引用web应用程序
    那这时候单元测试要测试哪个应用程序项目,可以从它的bin文件夹/程序生成的debug解决方案中找到后缀为dll的文件,直接引用它

( 如果应用程序的bin文件夹/程序生成的debug解决方案中,没有后缀为dll的文件,则要先对应用程序,在最顶上的工具栏找到【生成】——【生成解决方案】)

图为引用上面例1创建的【subject_with_unittest】web应用程序
VisualStudio2019,基于.NET Framework的单元测试_第10张图片

3、在web应用程序上添加单元测试项目

应用程序:【subject_add_unittest】
解决方案——添加——新建项目,新建一个单元测试项目,命名【UnitTestProject_add】
VisualStudio2019,基于.NET Framework的单元测试_第11张图片

  • 添加的单元测试,要引用【subject_add_unittest】项目才能引用它定义的方法进行测试

单元测试项目【UnitTestProject_add】——右键引用——添加引用——项目——同一个解决方案内可引用的项目会自动显示
VisualStudio2019,基于.NET Framework的单元测试_第12张图片
VisualStudio2019,基于.NET Framework的单元测试_第13张图片


4、其他

还有一种更加直接的创建方法,直接在要测试的方法名上右键——创建单元测试
VisualStudio2019,基于.NET Framework的单元测试_第14张图片

创建后如图,生成的测试模型命名就是你上面右键的方法名update_user_password再加Test
VisualStudio2019,基于.NET Framework的单元测试_第15张图片

三、单元测试的执行

好了,上面对几中创建和引用情况说了一下,现在开始对我的web应用程序开始创建单元测试进行测试。
这种情况属于上面哪种?对第三种,在项目上添加单元测试。

1、我的项目结构如下

单元测试项目命名:sql_unit_test
应用程序:sqldemo
VisualStudio2019,基于.NET Framework的单元测试_第16张图片


2、单元测试代码

接下来就编写测试单元对我程序中的update_user_password、update_user_password_parameter、 main,这三个进行测试

  • 编写程序代码和编写单元测试代码
    代码这部分,就像这篇里面一样,反正也是从这里扩展出来的:
    【Asp.net】C#SQL Server数据库访问之ExecuteNonQuery()

  • 贴一个最简单的判断预期值和获取值是否相等的测试
        
        [TestMethod]
        public void TestMethod3()
        {
            string expected = "xxxx";
            using (var sw = new StringWriter()) 
            {
                Console.SetOut(sw);
                SqlDAL.main();
                var result = sw.ToString();
                Assert.AreEqual(expected, result);//Assert.AreEqual判断预期值和获取值是否相等。
            }
        }
        

        public static void main()
        {
            Console.WriteLine("你好,世界!");//没错,一切都是从hello word开始
        }

3、 测试代码执行

打开测试资源管理器,会看到里面有创建好的三个测试模型。右键模型3,运行
(也可以打断点后右键单元测试点调试。)
VisualStudio2019,基于.NET Framework的单元测试_第17张图片


4、单元测试的运行结果

(我上面运行的是模型3哦)贴一张一目了然的图片出来:测试的代码和对应被测试的类
TestMethod1对应测试update_user_password
TestMethod2对应测试update_user_password_parameter
TestMethod3对应测试main
(测试模型的命名可以更清晰点,如test_for_对应被测试的方法名…我就懒得改了…)

VisualStudio2019,基于.NET Framework的单元测试_第18张图片
图右下角为执行测试模型3后,测试未通过后输出的消息

测试运行通过的在【测试资源管理器】中为绿色的勾勾,在测试代码和被测试类上也会有一个绿色勾勾(用绿框框圈出来了)。
未测试过为蓝色
测试未通过为红色


5、运行结果的输出

  • 点击“打开此结果的其他输出”
    VisualStudio2019,基于.NET Framework的单元测试_第19张图片


    ps:
    (在项目的文件夹中你会发现每次测试都会有一个相应的单元测试输出文档)

四、why?为什么要做单元测试?

  • 快速测试代码输出结果是否符合预期啊,逻辑是否正确啊,也不用再写一堆系统的外部操作行为的触发。
  • 呃…如果需求变化后,要重构代码的话?!运行一遍单元测试,帮你判断重构是否很成功需要吗?
  • 可以记录每次的测试记录需要吗?
    VisualStudio2019,基于.NET Framework的单元测试_第20张图片
    好的,打扰了,我自己走…

五、还是总结一下下吧

虽然现在懂得不多,只用到一个MSTest,积少成多,总会遇到更多的,继续学习~加油!

最后,放一个我只看懂了前面在说的MSTest,后面的完全没看懂…本着实在看不懂就放着先吧的原则,先放着吧,也许哪一天用上的时候就豁然开朗了呢(实践是检验真理的唯一标准,用到的时候自然就懂了)…(狗头保命)
重温《单元测试的艺术》,总结常用知识点
VisualStudio2019,基于.NET Framework的单元测试_第21张图片

你可能感兴趣的:(.NET)