2009-05-17 22 views
5

Tôi đang cố gắng sử dụng Moq 3.x, nó hoạt động tuyệt vời. Tuy nhiên, tôi có một vấn đề tôi không thể tìm ra cách để giải quyết. VớiMoq với đối số Hành động

public interface ITestSpec 
{ 
    bool Run(Action<string, string> onIncorrectResponse); 
} 

tôi đang cố gắng như sau:

var passingTestSpec = new Mock<ITestSpec>(); 
passingTestSpec 
    .Setup(m => m.Run(null)) 
    .Returns(true); 

Action<string, string> fakeAction = 
    (expected, actual) => { throw new Exception("Should not run"); }; 

Assert.IsTrue(passingTestSpec.Object.Run(fakeAction)); 

Vấn đề của tôi là bất kỳ cuộc gọi trên passingTestSpec.Object.Run (... một số hành động ...) trả về false. Dường như thư viện Moq đang cố gắng kết hợp hành động với đối số mà tôi đã chuyển đến Run() trong lệnh gọi Setup() và không thành công. Nó thực sự không quan trọng những gì hành động tôi đặt trong cuộc gọi Run() ... nó vẫn trở về sai.

Bất kỳ ý tưởng nào?

[Chỉnh sửa] Tôi vừa phát hiện ra điều gì đó; nếu tôi thay thế đường dây thiết lập bằng

.Setup(m => m.Run(fakeAction)) 

vượt qua kiểm tra. Tuy nhiên, tôi không thể biết hành động của phương thức .Run() sẽ được gọi với, vì vậy đây không phải là một giải pháp. Có ai biết về một hành động tương đương với It.IsAny không?

Trả lời

13

Có gì sai với:

It.IsAny<Action<string, string>>() 
+0

LOL Tôi đáng lẽ phải biết một người nào đó đang diễn ra để tìm giải pháp ... để suy nghĩ tôi đã lãng phí nhiều giờ trên này :(Cảm ơn, tôi sẽ đi với điều đó, nó tốt hơn hơn tôi. –

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