Moq,就是Mock you。读音可以读成Mock~you。是Mock框架的一种。用于测试中的Mock测试。Mock是模拟的意思。Mock是模拟对象的一种技术。
它可以用于以下情况(引用):
----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情)
----- 真实对象很难被创建(比如具体的web容器)
----- 真实对象的某些行为很难触发(比如网络错误)
----- 真实情况令程序的运行速度很慢
----- 真实对象有用户界面
----- 测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了)
----- 真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)
举个明了的例子:在开发一套BS网店系统时,想集中精力开发业务逻辑部分,而不想在数据层上花费太多时间,这时,可以通过Mock对象来模拟数据层,而不必去为数据连接,CRUD,Mapping等等去做太多的事,而又可以使业务测试可以进行下去。
下载地址:
这里有一些文档说明。
可以模拟接口和存在的类。在模拟类时有一些限制。类不能是密封的。方法要加上虚修饰符。不能模拟静态方法(可以通过适配器模式来模拟静态方法)。
下边是一个小例子
准备工作:
public interface ITaxCalculator
{
decimal GetTax(decimal rawPrice);
}
public class Product
{
public int ID { get; set; }
public String Name { get; set; }
public decimal RawPrice { get; set; }
public decimal GetPriceWithTax(ITaxCalculator calculator)
{
return calculator.GetTax(RawPrice) + RawPrice;
}
}
测试
public void TestTax()
{
Product myProduct = new Product { ID = 1, Name = "TV", RawPrice =
Mock<ITaxCalculator> fakeTaxCalculator = new Mock<ITaxCalculator>();
fakeTaxCalculator.Setup(tax => tax.GetTax(
decimal calculatedTax = myProduct.GetPriceWithTax(fakeTaxCalculator.Object);
fakeTaxCalculator.Verify(tax => tax.GetTax(
Assert.AreEqual(calculatedTax,
}
其中:
Mock<ITaxCalculator> fakeTaxCalculator = new Mock<ITaxCalculator>();
fakeTaxCalculator.Setup(tax => tax.GetTax(
这部分就是建立Mock对象。
这里其实对GetTax方法进行了模拟:
GetTax(
当调用myProduct.GetPriceWithTax(fakeTaxCalculator.Object)时,那么,
return calculator.GetTax(RawPrice) + RawPrice;
现在calculator对象已经进行了模拟,GetPriceWithTax返回GetTax的值+RawPrice的值。
此时的Product的RawPrice的值为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?