我们在日常项目开发中,为了解耦都会采用面向接口编程,在开发过程中,可能接口具体实现还未准备好,为了尽早完成自测,这时候就需要来模拟对象来完成测试。
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开发的适合外贸商城系统