2017-09-26 44 views
0

最近我做了很多單元測試,並且我從Moq庫中發現了Mock.Of<T>方法。在閱讀this並最終that我發現Mock.Of是創建模擬界面實例的好選擇,但是我可以通過關鍵字new反對自己的常規類呢?一些Nunit教程使用這種方法,這對我來說很困惑,因爲我覺得它沒有任何用處。Moq Mock.Of <Obj> vs new Obj();

Person newPerson = new Person() { Name = "David", Surname = "Smith" }; 
    Person mockedPerson = Mock.Of<Person>(o => o.Name == "David" && o.Surname == "Smith"); 

這兩個對象有什麼不同嗎?在這種情況下,Mock.Of有什麼優勢,或者我應該使用常規的new關鍵字來創建類的新實例?

回答

2

我認爲你展示的代碼完全沒有考慮到嘲笑的重點。 Mocking應該在接口和抽象類上工作,所以你不必創建實際的對象。無論是或者你創建一個對象的模擬

所以,你可以做Mock.Of<Person>然後你分配你的測試中需要的一些值,但你不做的是先創建對象並設置它,然後創建一個嘲笑它。

假設你有這樣的代碼:

public interface IPerson 
{ 
    some method and property signatures 
} 

,那麼你必須

public class Person : IPerson 
{ 
    some code here 
} 

現在想象你有這需要IPerson作爲參數的方法

,那麼你可以這樣做:

var mockedPerson = Mock.Of<IPerson>(); 
mockedPerson.Age = 27; 

int age = GetAge(mockedPerson); 
Assert.AreEqual(age, 27) 

創建一個實際對象的模擬對我來說毫無意義。

+0

是的,我完全同意你的看法。這就是爲什麼當我在一些教程中看到這種方法時,我感到非常困惑,這也是我爲什麼來到這裏的原因。可悲的是我失去了消息來源,所以我無法指出這些教程 – Erexo