一个易用的.Net测试模拟库

我们在日常项目开发中,为了解耦都会采用面向接口编程,在开发过程中,可能接口具体实现还未准备好,为了尽早完成自测,这时候就需要来模拟对象来完成测试。

01 项目简介

FakeItEasy是一个.NET平台的简单mocking开源库,它提供了一个简单的方式来模拟对象和创建伪造对象,方便我们在单元测试中更容易地创建模拟对象。

该库使用非常简单,方便开发者模拟各种情况,来检查被测试的代码是否能够正确。

02 使用方法

**示例:**比如一个商城,我们需要获取商品的价格。

在三层架构里,我们就会定义仓储接口:IProductRepository,供业务服务层调用。

1、仓储接口

复制代码
/// <summary>
/// 商品仓储接口
/// </summary>
public interface IProductRepository
{
    /// <summary>
    /// 获取商品价格
    /// </summary>
    /// <param name="productId"></param>
    /// <returns></returns>
    decimal GetProductPrice(int productId);
}

2、商品服务

复制代码
/// <summary>
/// 商品服务
/// </summary>
public class ProductService
{
    private readonly IProductRepository _productRepository;
    public ProductService(IProductRepository productRepository)
    {
        _productRepository = productRepository;
    }

    /// <summary>
    /// 获取商品价格
    /// </summary>
    /// <param name="productId"></param>
    /// <returns></returns>
    public decimal GetPriceForProduct(int productId)
    {
        return _productRepository.GetProductPrice(productId);
    }
}

3、模拟单元测试

复制代码
using FakeItEasy;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestMethod]
void TestMethod()
{
    //模拟创建商品仓储对象
    var productRepository = A.Fake<IProductRepository>();

    //模拟仓储获取商品价格
    A.CallTo(() => productRepository.GetProductPrice(1)).Returns(19);
    A.CallTo(() => productRepository.GetProductPrice(2)).Returns(20);

    var productService = new ProductService(productRepository);

    //验证是否正确
    var result1 = productService.GetPriceForProduct(1);
    Assert.AreEqual(result1, 19);

    //验证是否正确
    var result2 = productService.GetPriceForProduct(2);
    Assert.AreEqual(result2, 20);
}

03 项目地址

https://github.com/FakeItEasy/FakeItEasy

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

我是编程乐趣,一个.Net开发经验老程序员,欢迎"关注"我,每天为你分享开源项目和编程知识。

也欢迎加入【.Net技术编程交流社区】,和大家共同学习交流!,
点击加入https://bbs.csdn.net/topics/613465368

  • End -

推荐阅读

推荐一个.Ner Core开发的配置中心开源项目

一个跨平台执行外部命令的C#开源库

一个基于.Net高性能跨平台内网穿透工具

一个C#开发的Windows远程桌面工具

一个基于.Net Core开发的适合外贸商城系统

相关推荐
时光追逐者12 分钟前
C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)
c#·.net·.netcore·.net core
SEO-狼术3 小时前
Pcloudy 7.6 adds QuantumRun
.net
追逐时光者16 小时前
.NET 使用 MethodTimer 进行运行耗时统计提升代码的整洁性与可维护性!
后端·.net
许泽宇的技术分享1 天前
Windows桌面自动化的革命性突破:深度解析Windows-MCP.Net Desktop模块的技术奥秘
windows·自动化·.net
追逐时光者2 天前
C#/.NET/.NET Core技术前沿周刊 | 第 50 期(2025年8.11-8.17)
后端·.net
唐青枫2 天前
别滥用 Task.Run:C# 异步并发实操指南
c#·.net
zzzhpzhpzzz3 天前
Win10快速安装.NET3.5
.net·win10
许泽宇的技术分享3 天前
Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
windows·自动化·.net
百锦再3 天前
.NET 的 WebApi 项目必要可配置项都有哪些?
java·开发语言·c#·.net·core·net
hqwest4 天前
C#WPF实战出真汁06--【系统设置】--餐桌类型设置
c#·.net·wpf·布局·分页·命令·viewmodel