2015-06-10 34 views
0

我正在使用Moq。是否有可能基於現有的實例創建一個模擬對象? 我的類有一個複雜的初始化,它從外部XML文件加載一些信息。我已經有了一些例程來做這個初始化,並且可以很容易地獲得一個存在的對象。我認爲如果Moq能夠從這個存在的實例中創建一個模擬對象,並且除了設置調用之外通常會調用實際實例。我知道我可以通過將CallBase設置爲true來獲得模擬對象,但我需要對模擬對象進行很多初始化。這是我希望的:基於已有的實例創建模擬

MyClass myclass = GetMyClass(); 
var mock = Mock.Get<MyClass>(myclass); // This will raise exception because myclass is not a mock object 
mock.SetUp<String>(p=>p.SomeMethod).Returns("Test String"); // Only SomeMethod() should be mocked 

// this will call SomeMethod and get the test string, for other methods that are not mocked will do the real calls 
myclass.DoRealJob(); 

感謝您的任何想法,如果可能的話。

回答

0

這裏是一個例子。請注意,您需要將您的方法標記爲virtual

public class MyClass 
{ 
    public virtual string SomeMethod() 
    { 
      return "real"; 
    } 
} 

[Test] 
public void TestingSO() 
{ 
    var myMockClass = new Mock<MyClass>(); 

    myMockClass.Setup(c => c.SomeMethod()).Returns("Moq"); 

    var s = myMockClass.Object.SomeMethod(); //This will return "Moq" instead of "Real" 
} 
+0

如上所述,我想要的是從一個存在的實例中獲取一個模擬對象。無論如何感謝您的回覆。 – jones

相關問題