一个易用的.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开发的适合外贸商城系统

相关推荐
一个帅气昵称啊6 小时前
.Net通过EFCore和仓储模式实现统一数据权限管控并且相关权限配置动态生成
.net·efcore·仓储模式
helloworddm8 小时前
CalculateGrainDirectoryPartition
服务器·c#·.net
步步为营DotNet8 小时前
深度剖析.NET中HttpClient的请求重试机制:可靠性提升与实践优化
开发语言·php·.net
ChaITSimpleLove9 小时前
使用 .net10 构建 AI 友好的 RSS 订阅机器人
人工智能·.net·mcp·ai bot·rss bot
专注VB编程开发20年9 小时前
vb.net宿主程序通过统一接口直接调用,命名空间要一致
服务器·前端·.net
ChaITSimpleLove1 天前
基于 .NET Garnet 1.0.91 实现高性能分布式锁(使用 Lua 脚本)
分布式·.net·lua
用户4488466710601 天前
.NET进阶——深入理解线程(2)Thread入门到精通
c#·.net
一个帅气昵称啊1 天前
.Net——AI智能体开发基于 Microsoft Agent Framework 实现第三方聊天历史存储
人工智能·microsoft·.net