Moq 是mock库

Moq 是 .NET 平台上非常流行的一个单元测试模拟(Mock)库。它主要用于在测试中创建接口或类的模拟对象,从而隔离被测代码与外部依赖(如数据库、服务等),便于编写高质量的单元测试。

主要特点:

  • 支持接口和虚方法的模拟
  • 可设置方法返回值、属性值、事件等
  • 可验证方法调用次数和参数
  • 语法简洁,易于集成到主流测试框架(如 xUnit、NUnit、MSTest)

示例:模拟接口方法

假设有如下接口和服务类:

csharp 复制代码
public interface IUserRepository
{
    string GetUserName(int userId);
}

public class UserService
{
    private readonly IUserRepository _repository;

    public UserService(IUserRepository repository)
    {
        _repository = repository;
    }

    public string GetWelcomeMessage(int userId)
    {
        var name = _repository.GetUserName(userId);
        return $"欢迎,{name}!";
    }
}

使用 Moq 进行单元测试:

csharp 复制代码
using Moq;
using Xunit;

public class UserServiceTests
{
    [Fact]
    public void GetWelcomeMessage_ReturnsCorrectMessage()
    {
        // 创建接口的模拟对象
        var mockRepo = new Mock<IUserRepository>();
        mockRepo.Setup(r => r.GetUserName(1)).Returns("王五");

        var service = new UserService(mockRepo.Object);

        var message = service.GetWelcomeMessage(1);

        Assert.Equal("欢迎,王五!", message);

        // 验证方法是否被调用
        mockRepo.Verify(r => r.GetUserName(1), Times.Once);
    }
}

说明:

  • Mock<IUserRepository> 创建了接口的模拟对象,并设置了返回值。
  • 测试时只关注业务逻辑,不依赖真实的数据源。
  • 可验证方法是否被调用,确保交互正确。

更多用法可参考官方文档:Moq 官网

相关推荐
五仁火烧5 分钟前
安装rust开发环境
开发语言·后端·rust
IT枫斗者11 分钟前
Netty的原理和springboot项目整合
java·spring boot·后端·sql·科技·mysql·spring
Java程序之猿22 分钟前
Springboot 集成apache-camel +mqtt 根据主题处理mqtt消息
java·spring boot·后端
serendipity_hky32 分钟前
【go语言 | 第3篇】go中类的封装、继承、多态 + 反射
开发语言·后端·golang·反射
悟空码字44 分钟前
SpringBoot 整合 ElasticSearch,给搜索插上“光速翅膀”
java·后端·elasticsearch
星浩AI1 小时前
手把手教你用 RAG 打造专属知识库问答系统
后端
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:深度解析 Wire 依赖注入集成实践
后端·go
回家路上绕了弯1 小时前
代码的三大核心素养:如何同时兼顾可维护性、可扩展性、可测试性
分布式·后端
快手技术1 小时前
入围AA总榜Top 10,Non-Reasoning Model榜单第一!KAT-Coder-Pro V1 新版本踏浪归来!
前端·后端·前端框架
小坏讲微服务1 小时前
Spring Boot4.0整合RabbitMQ死信队列详解
java·spring boot·后端·rabbitmq·java-rabbitmq