美文网首页
{C#-05D} 单测.CallBase

{C#-05D} 单测.CallBase

作者: 码农猫爸 | 来源:发表于2020-10-08 19:51 被阅读0次
背景
  • 替换方法|函数|属性,范围涉及默认|全部|全不|定向。
代码
using Moq;
using System.Data;
using System.Diagnostics;
using Xunit;

namespace CallBack
{
    public class Builder
    {
        // 交互(方法)
        public virtual void Interact(string content)
        {
            Debug.Print(content);
        }

        // 数据(函数)
        public virtual DataTable GetData()
        {
            var result = new DataTable();
            result.Columns.Add("id", typeof(int));

            result.Rows.Add(1);

            return result;
        }
    }

    public class BuilderTests
    {
        private const int
            realTableRows = 1,
            mockTableRows = 2;

        // 默认CallBase = false
        private Mock<Builder> mock = new Mock<Builder>();

        [Fact(DisplayName = "默认")]
        public void ExecuteDefault_ReturnsNull()
        {
            mock.Object.Interact("default");

            var actual = mock.Object.GetData();
            Assert.Null(actual);
        }

        [Fact(DisplayName = "全不重写")]
        public void NotOverride_ReturnsTrue()
        {
            mock.CallBase = true;
            mock.Object.Interact("default"); // 打印default

            int count = mock.Object.GetData().Rows.Count;
            Assert.True(count == realTableRows);
        }

        [Fact(DisplayName = "全重写")]
        public void OverrideAll_ReturnsTrue()
        {
            mock.Setup(x => x.Interact(It.IsAny<string>())); // 空方法,效果同省略
            mock.Setup(x => x.GetData()).Returns(FakeTable);

            mock.Object.Interact("default"); // 不打印

            int count = mock.Object.GetData().Rows.Count;
            Assert.True(count == mockTableRows);
        }

        [Fact(DisplayName = "定向重写")]
        public void Specify_ReturnsTrue()
        {
            mock.CallBase = true; // 先采用基类方法和函数
            mock.Setup(x => x.Interact(It.IsAny<string>())); // 再定向重写

            mock.Object.Interact("default"); // 不打印

            int count = mock.Object.GetData().Rows.Count;
            Assert.True(count == realTableRows);
        }

        private DataTable FakeTable()
        {
            var result = new DataTable();
            result.Columns.Add("id", typeof(int));

            result.Rows.Add(1);
            result.Rows.Add(2);

            return result;
        }
    }
}

相关文章

  • {C#-05D} 单测.CallBase

    背景 替换方法|函数|属性,范围涉及默认|全部|全不|定向。 代码

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

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

  • Android studio里单测覆盖率报告生成

    在Android studio里,单测分为本地单测和Android单测两种,区别在于是否需要使用dvm虚拟机,前者...

  • 徒手撸一个Mock框架(一)——如何创建一个mock对象

    自从老夫换了一个新厂之后,单测就写个不停,因为新厂对单测的要求还是比较高的。 在撸单测的过程中,用Mockito,...

  • iOS-单元测试

    单测在比较大的项目中会使用到,下面的几个东西是单测常用的工具,供大家参考。LCOV - 单测覆盖率报告生成工具;O...

  • 实验的变量与设计(四)

    (四)真实验设计 1单因素完全随机两等组设计 (1)单因素完全随机等组前测后测设计 统计方法1: 两组前测后测差值...

  • 最差的准实验设计是单组前测后测设计——课程笔记

    最差的准实验设计是单组前测后测设计。 因为单组前测后测设计中存在5种内部效度威胁:1趋中回归、2被试流失、3测验因...

  • 单测原则

    为何使用单元测试 它可以测试现有以及未来的功能模块,保证了代码质量。它强制你书写具有可测性,低耦合的代码。这比手工...

  • 谈谈单测

    个人认为, 一名菜鸟进阶到高级软件工程师需要的基本素质之一就是写单测! 作为一名菜鸟, 我刚开始也是排斥单测! 但...

  • 单测UnfinishedStubbingException

    用demo解释 这个问题的意见 https://medium.com/@adamspeakman/mockito-...

网友评论

      本文标题:{C#-05D} 单测.CallBase

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