csharp-moq4

Cómo crear mocks para testing en C# con Moq4


Moq4 es una bibliotecas más populares para el enmascaramiento de objetos o “mocks” en .NET.

Los objetos “enmascarados” o, como los llamamos normalmente “mocks”, son objetos ficticios que empleamos generalmente durante la fase de testing.

Al realizar pruebas unitarias de código encontraremos que, muchas veces, dependemos de objetos de terceros. Emplear estos objetos nos impide testear nuestro código de forma independiente o unitaria.

La solución habitual es crear un objeto ficticio que emplaremos en nuestro test, y que simula el comportamiento del objeto real, pero acotado y determinado.

Cómo usar Moq4

Podemos añadir la biblioteca a un proyecto de .NET fácilmente, a través del packete Nuget correspondiente.

Install-Package Moq

Ahora, supongamos que tenemos un interface

public interface IMiClase
{
    string Name { get; set; }
    int Value { get; set; }
    bool DoSomething(string value);
    int GetValue();

Podemos crear un Mock de IMiClase haciendo

var mock = new Mock<IMiClase>();
mock.Setup(x => x.DoSomething("something")).Returns(true);
mock.Setup(x => x.GetValue()).Returns(5);

Con esto acabamos de hacer que nuestro objeto ‘mock’ que implementa IMiClase, y que tiene un método DoSomething que al ser llamado con el parámetro ‘something’ devuelve true.

Ahora podemos usar este objeto en nuestros Test, sin tener un objeto “Real” que implemente IMiClase, si no algo que simula serlo (un Mock).

[Fact]
public void TestMethod()
{
	var mock = new Mock<IMiClase>();
	mock.Setup(x => x.DoSomething("something")).Returns(true);
	mock.Setup(x => x.GetValue()).Returns(5);

	var result = myClass.GetValue();
	Assert.Equal(5, result);
}

Por supuesto, Moq4 tiene muchísimas opciones para enmascarar cualquier comportamiento. Por ejemlo

  • Propiedades
  • Métodos sincronos o asíncronos
  • Parámetros pasados a los métodos
  • Herencia
  • Eventos y callbacks

En general, prácticamente cualquier comportamiento puede enmascarado o “mockeado”. De hecho, posiblemente tiene opciones que ni vayáis a usar nunca.

Podéis ver todas las opciones disponibles en la documentación del proyecto, en especial en la sección QuickStart que tiene un montón de ejemplos sobre como usar Moq4.

Moq4 es Open Source, y todo su código está disponible en Moq · GitHub

🍪 Lo de las cookies

Nuestro sitio usa cookies para analizar el tráfico de red

Al usar el sitio, aceptas el uso estas cookies.

Más información en Política de Cookies y Privacidad