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

devtools/2025/3/5 1:18:00/

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

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开发的适合外贸商城系统


http://www.ppmy.cn/devtools/164614.html

相关文章

github操作

在本地创建一个 Git 仓库并将其上传到 GitHub 的整个流程可以分为以下几个步骤。以下是详细的说明和对应的命令&#xff1a; 1. 安装 Git 确保你的系统已经安装了 Git。如果未安装&#xff0c;可以通过以下方式安装&#xff1a; Windows: 下载 Git for Windows 并安装。macOS…

Kotlin 扩展函数

Kotlin 扩展函数是一种强大的功能&#xff0c;它允许你为现有的类添加新的函数&#xff0c;而不需要修改原始类的代码。这意味着你可以为任何类添加方法&#xff0c;即使你没有访问该类的源代码。这对于创建通用工具函数、简化代码和提高可读性非常有用。 如何定义扩展函数 扩…

QT 中的元对象系统(三):QObject深入理解

目录 1.简介 2.特性 2.1.对象树与内存管理 2.2.信号与槽机制 2.3.事件处理 2.4.属性系统 2.4.1.Q_PROPERTY配置的属性 2.4.2.动态属性 2.4.3.实现原理 2.5.国际化支持 2.6. 定时器支持 3.类设计(q和d指针) 4.总结 1.简介 QObject这个 class 是 QT 对象模型的核心&…

博客系统--测试报告

博客系统--测试报告 项目背景项目功能功能测试①登录功能测试②发布博客功能测试③删除文章功能测试④功能测试总结&#xff1a; 自动化测试自动化脚本执行界面&#xff1a; 性能测试 本博文主要针对个人实现的项目《博客系统》去进行功能测试、自动化测试、性能测试&#xff0…

深入探究Python机器学习算法:无监督学习(聚类算法如 K-Means、DBSCAN,降维算法如 PCA、SVD)

文章目录 深入探究 Python 机器学习算法&#xff1a;无监督学习聚类算法K - Means聚类算法流程K值选择方法聚类结果的稳定性分析和评估方法 层次聚类算法原理和实现过程连接方法特点和适用场景可视化方法 DBSCAN密度聚类算法原理优势和局限性 降维算法主成分分析&#xff08;PC…

鸿蒙5.0实战案例:基于Asset下的高安全级别数据存储

往期推文全新看点&#xff08;文中附带全新鸿蒙5.0全栈学习笔录&#xff09; ✏️ 鸿蒙&#xff08;HarmonyOS&#xff09;北向开发知识点记录~ ✏️ 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ ✏️ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景&#…

STM32单片机芯片与内部111 STM32 DSP内核 介绍 功能 库与源码

目录 一、STM32F4 的 DSP 功能介绍 二、Cortex-M4 内核的 DSP 和专业 DSP 的区别 三、相关功能 1、BasicMathFunctions 2、FastMathFunctions 3、ComplexMathFunctions 4、FilteringFunctions 5、MatrixFunctions 6、TransformFunctions 7、ControllerFunctions 8、…

Python 如何实现烟花效果的完整代码

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…