gpt4 book ai didi

c# - 如何模拟从另一个方法调用的方法

转载 作者:行者123 更新时间:2023-12-01 22:16:40 25 4
gpt4 key购买 nike

假设我有这个

public interface ISomeInterface
{
public string GetSomething();
}

public class Sample : ISomeInterface
{
public string GetSomething()
{
return "HELLO";
}

public string MethodToTest()
{
return GetSomething();
}
}

我需要模拟

GetSomething()

为了改变字符串输出

MethodToTest()

所以我这样做了:

var mockClientConfigExtensions = new Mock<ISomeInterface>();
mockClientConfigExtensions.Setup(ss => ss.GetSomething()).Returns("DDDD");
var _os = new Sample();
var k = _os.MethodToTest();


Assert.Equal("DDDD", k);

问题是 获取一些东西()

仍然返回 HELLO 而不是 mock 它。我如何模拟 GetSomething(); ?

最佳答案

您的安装程序模拟接口(interface)是 mockClientConfigExtensions,但您正在测试的实例 k 是一种具体类型,与您执行安装程序的实例完全不同.

这不是你应该 mock 的方式。通常,您会模拟被测类的依赖关系,然后对它们执行设置。

如果您确实必须模拟被测试的类,那么您需要在具体实例上而不是在接口(interface)上实际设置方法。您还需要将要模拟的方法设为虚拟。例如:

public class Sample : ISomeInterface
{
public virtual string GetSomething()
{
return "HELLO";
}

public string MethodToTest()
{
return GetSomething();
}
}

...

var mockSample = new Mock<Sample>();
mockSample.Setup(s => s.GetSomething()).Returns("mystring");
Assert.Equal("mystring", mockSample.Object.MethodToTest());

https://github.com/Moq/moq4/wiki/Quickstart

关于c# - 如何模拟从另一个方法调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com