2011-06-11 58 views
32

所以假設我嘲笑以下類:我可以使用Moq來驗證在複雜參數中使用特定值調用了模擬方法嗎?

public class ClassAParams 
{ 
    public int RequestedId { get; set; } 
    public string SomeValue { get; set; } 
} 

public class ClassA 
{ 
    public void ExecuteAction(ClassAParams executeParams) {} 
} 

現在說我有另一個類(姑且稱之爲ClassB),我創建一個單元測試,我想確保當ClassB.Execute()被稱爲,即ClassB調用ClassA.ExecuteAction(),但我想,以確保該參數調用該方法用了1

通常的ClassAParams.RequestedId價值,我會做myMock.Verify(x => x.ExecuteAction(new ClassAParams { RequestedId = 1, SomeValue = "something" }));

在p處理這個問題問題是,我不想在此單元測試中檢查SomeValue參數的值或任何其他ClassAParams屬性。其他屬性將在其他單元測試中進行檢查,但必須驗證在每個單元測試中調用它的正確屬性(即使我不關心特定單元測試的範圍)會使單元維護變得煩人。

是否有任何方法可以使用Moq來驗證傳入模擬方法的結構只有某些屬性作爲特定值,而忽略其餘部分?

回答

60

mock.Verify存在過載,允許您測試某些內容。這是一個適用於你的測試的例子。

classA.Verify(
    a => a.ExecuteAction(
     It.Is<ClassAParams>(p => p.RequestedId == 12) 
    ) 
); 

這意味着「對於作爲參數傳遞任何ClassAParams,驗證RequestId等於12」

+0

工作就像一個魅力,謝謝! – KallDrexx 2011-06-11 18:50:58

相關問題