2012-05-17 16 views
8

¿Cuál es el uso correcto de Moq.MockRepository.Of() y Moq.MockRepository.OneOf()? He intentado algo así para tratar de resolverlo.Cómo usar el método Moq.MockRepository.Of()

var mr = new MockRepository(MockBehavior.Strict); 
var m = mr.Of<ISomeInterface>(); 
foreach (var obj in m) 
    cnt++; 

He encontrado que el cnt sigue incrementándose hasta el final. ¿Lo que da? La documentación con respecto a esto no está disponible.

Respuesta

9

Puede usar Moq.MockRepository.Of() para crear simulaciones mediante expresiones. Esto se explica mejor con un ejemplo:

public interface ITest 
{ 
    String Say(); 
    Int32 DoSomething(Int32 a, Int32 b); 
} 

class Program 
{ 
    public static void Main() 
    { 
     var repo = new MockRepository(MockBehavior.Strict); 
     var mock = repo.Of<ITest>() 
         .Where(s => s.Say() == "Hi!") 
         .Where(s => s.DoSomething(5, 4) == 20) 
         .Where(s => s.DoSomething(4, 5) == 9) 
         .Where(s => s.DoSomething(It.IsAny<Int32>(), 7) == 99) 
         .First(); 

     Console.WriteLine(mock.Say());     // prints Hi! 
     Console.WriteLine(mock.DoSomething(5, 4));  // prints 20 
     Console.WriteLine(mock.DoSomething(4, 5));  // prints 9 
     Console.WriteLine(mock.DoSomething(23423, 7)); // prints 99 
     Console.WriteLine(mock.DoSomething(0, 0));  // Fail due to MockBehavior.Strict 

     Console.ReadKey(); 
    } 
} 
+0

Tengo dificultades para obtener una instancia configurada del simulacro 'ITest'. El código de ejemplo funciona tal cual, pero adquirir la instancia 'simulada' da como resultado 'MockException: todas las invocaciones del simulacro deben tener una configuración correspondiente.' 'var mock = repo.Create () .Object;' o 'var mock = repo.Of () .Primera();' Supongo que estoy haciendo algo mal? –

Cuestiones relacionadas