IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> C#---单元测试 -> 正文阅读

[开发测试]C#---单元测试

假设场景

电扇依赖于电源,电源电流值不同电扇工作效果不同

using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var power = new PowerSupply();
            var fan = new DeskFan(power);
            Console.WriteLine(fan.Work());
        }			
    }
    class PowerSupply
    {
        public int GetPower()
        {
            return 210;
        }
    }
    class DeskFan
    {
        private PowerSupply _powerSupply;
        public DeskFan(PowerSupply powerSupply)
        {
            _powerSupply = powerSupply;
        }
        public string Work()
        {
            int power = _powerSupply.GetPower();
            if (power <= 0)
            {
                return "Won't Work";
            }
            else if (power < 100)
            {
                return "Slow";
            }
            else if (power < 200)
            {
                return "Work fine";
            }
            else
            {
                return "Warning!";
            }
        }
    }
}

可以看出,此时如果想测试风扇的工作情况,就必须去PowerSupply类内部提供电源的方法中去修改代码,而一个类设计好之后不应该再去修改代码的。就比如说这个场景下不止是风扇连接着电池,而还有设备也连接着。为了测试风扇而更改代码很可能会导致其他设备出故障。

引入接口,进行解耦,再使用单元测试

为了解决上面的测试问题,我们抽象出了一个电源提供接口,写一个测试类实现电源提供接口,专门用来测试电源电力大小对风扇造成的影响:

namespace TestClass
{
    class Program
    {
        static void Main(string[] args)
        {
            var fan = new DeskFan(new TestPowerSupply());
            fan.Work();
            Console.ReadKey();
        }
    }
    public  interface IPowerSupply
    {
        int GetPower();
    }

    /// <summary>
    /// 电源供应类
    /// </summary>
    public class PowerSupply:IPowerSupply
    {
        public int GetPower()
        {
            return 100;
        }
    }
    /// <summary>
    /// 测试电流
    /// </summary>
    public class TestPowerSupply : IPowerSupply
    {
        public int GetPower()
        {
            return 100000;
        }
    }
    /// <summary>
    /// 电扇
    /// </summary>
    public class DeskFan
    {
        private IPowerSupply _powerSupply;
        public DeskFan(IPowerSupply powerSupply)
        {
            _powerSupply = powerSupply;
        }
        /// <summary>
        /// 运行,还要验证电流力度
        /// </summary>
        /// <returns></returns>
        public string Work()
        {
            int power = _powerSupply.GetPower();
            //简单判断一下
            if(power<=0)
            {
                return "Wont't work";
            }
            else
            {
                return "Working";
            }

        }
    } 
}

要测试的话,我们可以使用单元测试进行调试。新建一个单元测试

namespace TestClassTests
{
    public class UnitTest1
    {
        [Fact]
        public void PowerLowerThanZero_OK()
        {
            var mock = new Mock<IPowerSupply>();
            mock.Setup(s=>s.GetPower()).Returns(()=>0); 
            var fan = new DeskFan(new PowerSupplyThanZero(0));
           var test= fan.Work();
            Assert.Equal("",test);

            //第二种写法,引用Moq.dll。此时就不需要再实现接口了,直接填需要的值
            var mock = new Mock<IPowerSupply>();
            mock.Setup(s => s.GetPower()).Returns(() => 0);

            var fan = new DeskFan(mock.Object);
            var test = fan.Work();
            Assert.Equal("", test);


        }
    } 
    public class PowerSupplyThanZero : IPowerSupply
    {
        private int _power;
        public PowerSupplyThanZero(int power)
        {
            _power = power;
        }
        public int GetPower()
        {
            return _power;
        }
    }
}

这样的测试方法进很正规了,不会影响到其他模块。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:55:05  更:2021-11-30 15:55:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 5:31:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码