0
0
CsharpHow-ToBeginner · 3 min read

How to Use Moq in C#: Simple Guide with Examples

To use Moq in C#, first install the Moq NuGet package. Then create a Mock<T> object for the interface or class you want to fake, set up expected behaviors with Setup, and use Object property to get the mocked instance for testing.
📐

Syntax

The basic syntax to use Moq involves creating a mock object, setting up its behavior, and then using it in your tests.

  • Mock<T> mock = new Mock<T>(); - creates a mock for type T.
  • mock.Setup(x => x.Method()).Returns(value); - defines what the mock should return when Method is called.
  • T obj = mock.Object; - gets the mocked object to pass into your code.
csharp
var mock = new Mock<IService>();
mock.Setup(service => service.GetData()).Returns("Hello");
IService service = mock.Object;
string result = service.GetData();
💻

Example

This example shows how to mock an interface IService with a method GetData. We set it up to return a fixed string and then call it to verify the behavior.

csharp
using System;
using Moq;

public interface IService
{
    string GetData();
}

public class Program
{
    public static void Main()
    {
        var mock = new Mock<IService>();
        mock.Setup(s => s.GetData()).Returns("Mocked Data");

        IService service = mock.Object;
        Console.WriteLine(service.GetData());
    }
}
Output
Mocked Data
⚠️

Common Pitfalls

Common mistakes when using Moq include:

  • Not setting up the mock before using it, so methods return default values like null or 0.
  • Forgetting to use mock.Object to get the mocked instance.
  • Trying to mock concrete classes without virtual methods or interfaces.
  • Not verifying calls when needed to check if methods were called.
csharp
/* Wrong: Using mock without Setup returns default */
var mock = new Mock<IService>();
IService service = mock.Object;
string result = service.GetData(); // returns null

/* Right: Setup before use */
mock.Setup(s => s.GetData()).Returns("Hello");
result = service.GetData(); // returns "Hello"
📊

Quick Reference

Here is a quick cheat sheet for common Moq methods:

MethodDescription
Mock()Creates a mock object for type T
Setup(expression)Defines behavior for a method or property
Returns(value)Specifies the return value for a setup
Verify(expression)Checks if a method was called
ObjectGets the mocked instance to use in tests

Key Takeaways

Install Moq via NuGet to start mocking in C# unit tests.
Create a Mock and use Setup to define method behaviors.
Always use mock.Object to get the mocked instance for testing.
Verify method calls when you need to check interactions.
Avoid mocking non-virtual methods or classes without interfaces.