加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 用Moq部分模拟课程

发布时间:2020-12-15 06:31:57 所属栏目:百科 来源:网络整理
导读:我想使用Moq仅模拟以下类的GetValue方法: public class MyClass{ public virtual void MyMethod() { int value = GetValue(); Console.WriteLine("ORIGINAL MyMethod: " + value); } internal virtual int GetValue() { Console.WriteLine("ORIGINAL GetVal
我想使用Moq仅模拟以下类的GetValue方法:
public class MyClass
{
    public virtual void MyMethod()
    {
        int value = GetValue();
        Console.WriteLine("ORIGINAL MyMethod: " + value);
    }

    internal virtual int GetValue()
    {
        Console.WriteLine("ORIGINAL GetValue");
        return 10;
    }
}

我已经读了一下这个应该如何应用于Moq.我在网上找到的解决方案是使用CallBase属性,但这对我来说不起作用.

这是我的考验

[Test]
public void TestMyClass()
{
     var my = new Mock<MyClass> { CallBase = true };
     my.Setup(mock => mock.GetValue()).Callback(() => Console.WriteLine("MOCKED GetValue")).Returns(999);
     my.Object.MyMethod();
     my.VerifyAll();
 }

我希望Moq使用MyMethod的现有实现,并调用mocked方法,从而产生以下输出:

ORIGINAL MyMethod: 999
MOCKED GetValue

但这就是我所得到的:

ORIGINAL GetValue
ORIGINAL MyMethod: 10

接着

Moq.MockVerificationException : The following setups were not matched: MyClass mock => mock.GetValue()

我有这种感觉,我完全误解了一些事情.我在这里缺少什么?
任何帮助将不胜感激

解决方法

好的,我在另一个问题中找到了答案: How to Mock the Internal Method of a class?.所以这是一个重复的,可以关闭.

不过,这里是解决方案:
只需将此行添加到要测试的项目的Assembly.config:

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] // namespace in Moq

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读