当前位置: 首页 > 知识库问答 >
问题:

mocked方法以外的其他方法调用mock对象的实际方法

朱淮晨
2023-03-14
IFoo
{
    string abc();
    string def();
}

Foo: IFoo
{
    string abc()
    {
        def();
    }

    string def()
    {
    }
}

Mymainclass
{
    private IFoo _foo;

    public Mymainclass():this(new Foo())
    {}

    public Mymainclass(IFoo foo)
    {
        _foo = foo;
    }

    string mainmethod()
    {
        _foo.abc();
    }
}

[TestClass]
public class Mymainclasstester
{
    Mymainclass mainclass;
    Mock<IFoo> mifoo;

    [TestInitialize]
    public void TestInitialize()
    {
        mifoo = new Mock<IFoo>();
        mifoo.Setup(x => x.def(It.IsAny<string>())).Returns("abc");
        mainclass = new Mymainclass(mifoo.Object);
    }

    [TestMethod]
    public void testmethod()
    {
        mainclass.mainmethod();
    }
}

共有1个答案

章盛
2023-03-14

无法使用接口存档所需内容。实际上,您可以通过嘲弄abc调用def,这似乎有点尴尬:

mock.Setup(x => x.abc()).Returns(() => mock.Object.def());

虽然我看不出这里有什么意义,但您可以只模拟abc...

使用mock存档所需内容的唯一方法是使用实际的classcallbase特性。

public class Foo : IFoo
{
    public virtual string abc() //methods have to be virtual to be mockable
    {
        return def();
    }

    public virtual string def() //methods have to be virtual to be mockable
    {
        return "123";
    }
}

//setup
var mock = new Mock<Foo>();
mock.Setup(x => x.def()).Returns("abc");
mock.Setup(x => x.abc()).CallBase();

mock.Object.abc(); // "abc"
 类似资料:
  • 我来自爪哇,在那里我很容易用间谍和mockito做这种事情。我意识到Moq不支持spie,但是如果您设置了callbase,那么在调用其他实际方法的同时,只在类中嘲弄一个方法似乎是可行的。 新测试的Legacy类,尝试测试Split()方法。将Split方法中的using中的显式filestream创建重构为它自己的GetReaderStream方法,这样我就可以模拟它了(我一开始是受保护的,但我

  • 问题内容: 我有一个正在测试的类,该类具有依赖关系的另一个类(该类的实例被传递给CUT的init方法)。我想使用Python Mock库来模拟此类。 我所拥有的是这样的: 没关系,但是“ methodfromdepclass”是参数化的方法,因此我想创建一个单独的模拟对象,其中根据将哪些参数传递给methodfromdepclass来返回不同的值。 我想要这种参数化行为的原因是,我想创建Class

  • 我需要用mockito测试一个类。下面是课堂和Mockito测试。 dbBuilder。parse(file)总是返回null,因为它调用几个类,这些类反过来又调用jar文件中的几个方法。尽管我嘲笑了所有这些,但它总是返回null。我无法跟踪空值来自何处。我试图压制这些方法,但仍然没有用。 由于此方法调用返回null,因此doc值为null。因此文档调用方法并运行mockito测试失败,。这个方法

  • 7.2.3 对象方法的调用 一旦创建了对象,就可以通过向对象发消息来调用对象的方法。消息的格式如下: <对象>.<方法>(<实参>) 其含义是请求<对象>执行<方法>,方法定义中列出的形式参数由<实参>提供。 例如,接着前面的例子执行如下语句: >>> p1.whatName() My name is Lucy >>> p2.whatName() My name is Tom >>> p2.ho

  • 但是当我的method2被调用时,AOP功能没有被调用,即没有调用AOPLogger类的checkAccess方法。 我错过什么了吗?

  • 本文向大家介绍python实现调用其他python脚本的方法,包括了python实现调用其他python脚本的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现调用其他python脚本的方法,分享给大家供大家参考。具体方法如下: 该实例调用当前目录下的md5get.py脚本。代码如下: 希望本文所述对大家的Python程序设计有所帮助。