FakeItEasy 框架快速入门





3.00/5 (2投票s)
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
。
模拟任何对象有两个简单的步骤
- 创建模拟对象
语法:A.Fake<>()
- 配置模拟对象的行为
语法: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 中最简单的模拟框架。 与其他模拟框架相比,我发现它非常易于使用。