美文网首页
{C#}单测.接口传参

{C#}单测.接口传参

作者: 码农猫爸 | 来源:发表于2022-06-14 20:22 被阅读0次
要点
  • 传参=复杂类或嵌套类时,必须通过接口,简化代码提高单测速度
  • 传参=基础类型时,可通过虚拟成员,避免接口膨胀
  • 依赖项提供2种功能(状态|交互),单测中区分处理可简化用例或提高覆盖率
  • 适合读者:初步掌握接口|单测的开发者,欲知接口|单测所以然的开发者
  • 自习关键字:控制反转(IOC),依赖注入(DI),可测试代码,模拟工具Moq,票根(stub)还是模拟(mock)
using System.Diagnostics;

namespace UnitTestWithInterface
{
    // [类的单测]
    // - 首先必须单测自身(ex.类A)并自证OK,然后在调用类(ex.类B)中作为依赖项
    // - 作依赖项时,类A的结果值实现2种功能(状态|交互)
    // - 状态:无关类B的运行流程,单测类B时Mock(模拟)类A的1种值即可,简化类B的单测组合
    // - 交互:影响流程,单测类B时模拟类A的所有值(ex. true|false)

    // 普通传参例@单测
    // [ex.]
    // Mock<FlatArgument> mock = new Mock<FlatArgument>(6);
    // mock.Setup(x=>x.Trim("a+b+c+d")).Returns("a+b...");
    public class FlatArgument
    {
        private readonly int maxLength;

        // 传参基础类型,模拟成本低,避免接口膨胀
        // 常见情形: ex. DateTime,静态基础类型
        public FlatArgument(int maxLength = 6)
        {
            this.maxLength = maxLength;
        }

        // virtual: Mock用
        public virtual string Trim(string fx)
        {
            // ... 实现逻辑(略)
            return "a+b..."; // ex. fx = a+b+c+d
        }
    }

    // 接口传参例@单测
    // [example]
    // Mock<IClassA> mock = new Mock<IClassA>();
    // mock.Setup(x=>x.Validate()).Returns(true);
    public class InterfaceAsArgument
    {
        private readonly IClassA a;

        // 接口优势
        // - 单测传参时无需生成复杂类或嵌套类,直接返回模拟结果
        public InterfaceAsArgument(IClassA a)
        {
            Debug.Assert(a != null);
            this.a = a;
        }

        public void Display()
        {
            if (a.Validate())
            {
                // 合法时细节(略)
                return;
            }

            // 非法时细节(略);
        }
    }

    public interface IClassA
    {
        bool Validate();
    }

    public class ClassA : IClassA
    {
        private readonly ClassB b;

        // ClassB=嵌套类作参数
        public ClassA(ClassB b)
        {
            Debug.Assert(b != null);
            this.b = b;
        }

        public bool Validate()
        {
            // ... 实现逻辑(略)
            return true;
        }
    }

    public class ClassB { }
}

相关文章

  • {C#}单测.接口传参

    要点 传参=复杂类或嵌套类时,必须通过接口,简化代码提高单测速度 传参=基础类型时,可通过虚拟成员,避免接口膨胀 ...

  • {C#-05C} 单测.复合方法

    背景 合成多个子方法时传参多,责任不清时难单测 代码例 环境类 环境类单测 子函数 子函数单测 复合函数 复合函数单测

  • Postman参数:urlencoded处理

    使用Firefox抓包测一个GET接口的时候,有一个参数data: 于是在postman中,第一次对接口传参时da...

  • Promise和promiseAll搭配接口的用法

    promiseTest=()=>{ Toast.loading("加载中"); //接口传参 constargsa...

  • {C#}单测.平衡构造器

    背景 在生产和单测环境中,通过构造器注入,统一了被调类的代码。但同时,生产环境中多次实例化被调类时,也产生了重复问...

  • C# 第二节

    C# 可空类型(Nullable) C# 单问号 ? 与 双问号 ?? ? :单问号用于对 int,double,...

  • Android studio 数据请求注意点

    接口传参: String name = "abc"; ---获取页面输入的内容,可用findViewById获取到...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 微信小程序上划屏幕分页

    先定义变量: 请求接口传参curpage与pagesize: onReachBottom方法: tips:需要在j...

  • Jmeter基础4 - 接口传参

    前言 接口传参在接口测试中算是一个比较常用的功能了,我们在模拟接口进行不同请求时,下个接口请求内容往往需要填入上一...

网友评论

      本文标题:{C#}单测.接口传参

      本文链接:https://www.haomeiwen.com/subject/lcbzmrtx.html