65.9K
CodeProject 正在变化。 阅读更多。
Home

FakeItEasy 框架快速入门

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2015 年 5 月 11 日

CPOL

1分钟阅读

viewsIcon

17024

downloadIcon

90

FakeItEasy 框架快速入门

引言

我写这篇文章是为了演示如何在测试驱动开发环境中,使用 FakeItEasy 框架与 C# 配合使用。 使用 FakeItEasy,我们可以模拟任何可以被覆盖的东西。

背景

我发现 FakeItEasy 是与 .NET 框架一起使用的最简单的模拟框架。 FakeItEasy 是一个用于 .NET 的模拟框架,适用于所有类型的模拟对象(mocks, stubs),并且与 C# 和 VB.NET 兼容。

目前,我正在使用 FakeItEasy.1.25.2 版本,配合 .NET 4.5 Framework 使用。

在继续编写代码之前,请从 Nuget 下载 FakeItEasy 和 Nunit。

从 Nuget 下载 FakeItEasy 和 Nunit 的步骤

  • 打开包管理器控制台:工具 → 库包管理器 → 包管理器控制台
  • 执行 Install-Package FakeItEasy
  • 执行 Install-Package Nunit

创建 Customer 类

在这个例子中,我创建了一个 public customer 类,其中包含一个 public virtual 方法 GetCustomerName,用于返回 customer 的名称。

FakeItEasy 的核心在于模拟任何被覆盖的对象,例如 接口 (Interface)抽象类 (abstract)虚方法 (virtual)。(//TODO)

在这个例子中,我使用了 virtual 关键字。

如果没有覆盖能力,FakeItEasy 将无法拦截该方法,并且我们会收到错误消息。

"Non virtual methods can not be intercepted". 

我们的目标是模拟 GetCustomerName 并根据我们的意愿返回结果。 我跳过了数据库连接的配置和返回实际客户名称的所有步骤,因为这超出了本文的范围。

public class Customer
    {
        public virtual string GetCustomerName(int Id)
        {
            return "Select Customer";
        }
    }

创建单元测试

以下代码演示了如何使用 FakeItEasy 模拟 GetCustomerName

模拟任何对象有两个简单的步骤

  1. 创建模拟对象

    语法:A.Fake<>()

  2. 配置模拟对象的行为

    语法:A.CallTo()

 [Test]
        public void Should_return_Customer_Name()
        {       
        //Arrange
            var fakeCustomerName = A.Fake<Customer>();
            int customerId = 12; //Any number

            //Act
            A.CallTo(() => fakeCustomerName.GetCustomerName(customerId)).Returns("Customer Name");

            //Assert
            Assert.AreEqual("Customer Name", fakeCustomerName.GetCustomerName(customerId));           
        }

结论

我发现 FakeItEasy 是 .NET 中最简单的模拟框架。 与其他模拟框架相比,我发现它非常易于使用。

© . All rights reserved.