让我们说我有这个
public interface ISomeInterface
{
public string GetSomething();
}
public class Sample : ISomeInterface
{
public string GetSomething()
{
return "HELLO";
}
public string MethodToTest()
{
return GetSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
我需要嘲笑
GetSomething()
Run Code Online (Sandbox Code Playgroud)
为了改变字符串输出
MethodToTest()
Run Code Online (Sandbox Code Playgroud)
所以我这样做了:
var mockClientConfigExtensions = new Mock<ISomeInterface>();
mockClientConfigExtensions.Setup(ss => ss.GetSomething()).Returns("DDDD");
var _os = new Sample();
var k = _os.MethodToTest();
Assert.Equal("DDDD", k);
Run Code Online (Sandbox Code Playgroud)
问题是GetSomething()
仍然返回HELLO而不是嘲笑它.我如何模拟GetSomething(); ?
您使用安装程序的模拟界面是mockClientConfigExtensions,但您正在测试的实例k是一种具体类型,与您执行安装程序的实例完全不同.
这不是你应该嘲笑的方式.通常你会模拟被测试类的依赖关系,然后对它们进行设置.
如果你真的必须模拟测试中的类,那么你需要在不在接口上的具体实例上实际设置方法.您还需要使您想要模拟虚拟的方法.例如:
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());
Run Code Online (Sandbox Code Playgroud)
https://github.com/Moq/moq4/wiki/Quickstart
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |