【问题标题】:Create mock based on existed real instance基于已有的真实实例创建 mock
【发布时间】:2015-06-10 06:26:18
【问题描述】:

我正在使用起订量。是否可以基于现有的真实实例创建模拟对象? 我的类作为初始化有点复杂,它从外部 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();

如果可能的话,谢谢你的任何想法。

【问题讨论】:

    标签: mocking moq


    【解决方案1】:

    这是一个例子。请注意,您需要将要模拟的方法标记为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"
     }
    

    【讨论】:

    • 如上所述,我想要的是从现有的真实实例中获取模拟对象。无论如何感谢您的回复。
    • 有没有办法获得真实类的代理,这样我就可以调用 Verify() 但不让 impl 成为虚拟对象?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2018-12-08
    • 1970-01-01
    • 2016-06-21
    • 2016-09-10
    • 2016-11-03
    • 1970-01-01
    相关资源
    最近更新 更多