2012-05-17 32 views
8

Sử dụng đúng Moq.MockRepository.Of() và Moq.MockRepository.OneOf() là gì? Tôi đã thử một cái gì đó như thế này để cố gắng tìm ra nó.Cách sử dụng phương thức Moq.MockRepository.Of()

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

Tôi đã tìm thấy rằng cnt chỉ tiếp tục tăng lên không có kết thúc. Đưa cái gì? Tài liệu liên quan đến điều này không phải là sắp tới.

Trả lời

9

Bạn có thể sử dụng Moq.MockRepository.Of() để tạo mocks thông qua biểu thức. Điều này được giải thích tốt nhất bằng một ví dụ:

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

Tôi đang gặp khó khăn khi nhận được một ví dụ được định cấu hình của mô hình 'Thông minh nhất'. Mã mẫu hoạt động như-is, nhưng nếu không có được kết quả 'giả' kết quả trong 'MockException: Tất cả các lời gọi của mô hình phải có một thiết lập tương ứng.' ' var mock = repo.Create () .Object; ' hoặc 'var mock = repo.Of (). Đầu tiên(); ' Tôi đoán tôi đang làm điều gì đó sai? –

Các vấn đề liên quan