2012-05-17 13 views
8

Qual è l'uso corretto di Moq.MockRepository.Of() e Moq.MockRepository.OneOf()? Ho provato qualcosa del genere per cercare di capirlo.Come utilizzare il metodo Moq.MockRepository.Of()

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

Ho trovato che cnt continua ad aumentare a non finire. Cosa dà? La documentazione relativa a questo non è imminente.

risposta

9

È possibile utilizzare Moq.MockRepository.Of() per creare mock tramite espressioni. Questo è meglio spiegato con un esempio:

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

Ho difficoltà a ottenere un'istanza configurata della simulazione "ITest". Il codice di esempio funziona così com'è, ma in caso contrario l'acquisizione dell'istanza "simulata" risulta in "MockException: Tutte le invocazioni del mock devono avere un'impostazione corrispondente" 'var mock = repo.Create () .Object;' o 'var = finto repo.Of () .Prima();' suppongo che sto facendo qualcosa di sbagliato? –

Problemi correlati