O que é Moq e para que serve?
\n\nMoq (pronuncia-se "Mok") é uma biblioteca popular para criar objetos mock (simulados) em C# (.NET). Ela faz parte do ecossistema de testes unitários e é usada para isolar o código testado de suas dependências.
\n\nEm aplicações reais, as classes frequentemente dependem de outras classes: bancos de dados, serviços web, sistema de arquivos, APIs de serviços terceiros. Ao escrever testes unitários, não queremos testar essas dependências externas — queremos verificar apenas a lógica da nossa classe. O Moq permite criar objetos "falsos" (mock) que imitam o comportamento das dependências reais, mas são totalmente controlados pelo teste.
\n\nPrincipais cenários de uso do Moq:
\n- \n
- Isolamento de testes: testar uma classe sem executar banco de dados ou serviços externos. \n
- Verificação de interações: garantir que um método foi chamado com os argumentos corretos, um número específico de vezes. \n
- Definição de valores de retorno: fazer a dependência retornar os dados necessários para testar a lógica. \n
- Simulação de exceções: verificar como o código lida com erros de sistemas externos. \n
O Moq funciona com interfaces e métodos virtuais de classes. Esta é uma limitação importante: você não pode simular um método estático ou um método não virtual.
\n\nInstalação do Moq
\n\nO Moq é distribuído via NuGet — o gerenciador de pacotes para .NET. Pode ser instalado de várias maneiras:
\n\nVia .NET CLI (recomendado)
\ndotnet add package Moq\n\nVia Package Manager Console (Visual Studio)
\nInstall-Package Moq\n\nVia NuGet Package Manager UI
\nNo Visual Studio: Clique direito no projeto → Manage NuGet Packages → Pesquisar "Moq" → Instalar
\n\nRequisitos: .NET Framework 4.5+ ou .NET Core 2.0+ / .NET 5+
\n\nInício rápido: primeiro teste com Moq
\n\nSuponha que temos uma interface de repositório e um serviço que a utiliza:
\n\npublic interface IUserRepository\n{\n User GetUserById(int id);\n void SaveUser(User user);\n}\n\npublic class UserService\n{\n private readonly IUserRepository _repository;\n\n public UserService(IUserRepository repository)\n {\n _repository = repository;\n }\n\n public string GetUserName(int userId)\n {\n var user = _repository.GetUserById(userId);\n return user?.Name ?? "Unknown";\n }\n}\n\npublic class User\n{\n public int Id { get; set; }\n public string Name { get; set; }\n}\n\nAgora vamos escrever um teste usando Moq:
\n\nusing Moq;\nusing Xunit;\n\npublic class UserServiceTests\n{\n [Fact]\n public void GetUserName_WhenUserExists_ReturnsUserName()\n {\n // Arrange\n var mockRepo = new Mock<IUserRepository>();\n mockRepo.Setup(repo => repo.GetUserById(1))\n .Returns(new User { Id = 1, Name = "Alice" });\n\n var service = new UserService(mockRepo.Object);\n\n // Act\n var result = service.GetUserName(1);\n\n // Assert\n Assert.Equal("Alice", result);\n mockRepo.Verify(repo => repo.GetUserById(1), Times.Once);\n }\n}\n\nAnálise do exemplo:
\n- \n
new Mock<IUserRepository>()— criamos um objeto mock para a interface. \n .Setup(...)— configuramos o comportamento: ao chamarGetUserById(1), retornar o usuário Alice. \n mockRepo.Object— obtemos o objeto "falso" que passamos para o serviço. \n mockRepo.Verify(...)— verificamos que o método foi chamado exatamente uma vez. \n
Principais métodos e funções do Moq
\n\n1. Mock<T>.Setup()
\nO que faz: Configura o comportamento do mét
Também na biblioteca
Flyway para Java: guia completo com exemplos
Trabalho com XML em Kotlin: bibliotecas e ferramentas para parsing e criação
Parsing de HTML em C# (.NET): bibliotecas HtmlAgilityPack e AngleSharp
SwiftyJSON para Swift: guia completo com exemplos