2010-07-05 59 views

回答

7

安裝方法用於模擬對象 上設置的期望例如:

mock.Setup(foo => foo.DoSomething("ping")).Returns(true); 

這裏要設置模擬對象的DoSomething方法。你說當參數是「ping」時,該方法返回true。

現在,此對象可以進一步充當模擬或存根,取決於您的使用情況。如果你想在基於狀態的測試中使用它,它可以作爲一個存根。如果你想在基於行爲的測試中使用它,它可以作爲一個模擬。在行爲測試中,您將調用模擬對象的驗證方法斷言,該方法被稱爲與「平」參數

進一步參考以下鏈接:

http://martinfowler.com/articles/mocksArentStubs.html

http://code.google.com/p/moq/wiki/QuickStart

32

的Moq Mock對象的默認行爲是對所有方法和屬性進行存根。這意味着使用任何參數調用該方法/屬性不會失敗,並將返回特定返回類型的默認值。

您撥打的任何或全部的原因如下Setup方法:

  • 你想輸入值限制的方法。
public interface ICalculator { 
    int Sum(int val1, val2); 
} 

var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    It.IsAny<int>(), //Any value 
    3    //value of 3 
)); 

上面的設置將匹配任何價值的方法Sum呼籲val1和3

  • 要返回一個特定的值val2值。與ICalculator繼續示例,以下設置將返回的值10,無論輸入參數:
var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    It.IsAny<int>(), //Any value 
    It.IsAny<int>() //Any value 
)).Returns(10); 
  • 你想用Mock<T>.VerifyAll()你設置後,確認所有先前的設置都被稱爲(一旦)。
var mock = new Mock<ICalculator>(); 
mock.Setup(m=>m.Sum(
    7, //value of 7 
    3    //value of 3 
)); 

mock.Setup(m=>m.Sum(
    5, //value of 5 
    3    //value of 3 
)); 

mock.VerifyAll();  

上面的代碼驗證Sum被調用兩次。一次使用(7,3),一次使用(5,3)

+1

我沒有意識到可以簡單地調用Setup()多次設置多個不同的參數,這是我見過的唯一的地方。 – 2015-09-07 21:03:10