c# - 为什么调用 someMockInstance.Object 调用构造函数?
问题描述
对不起,如果这真的很明显......
我试图理解为什么调用someMockInstance.Object
调用类构造函数。
这是一个例子:
public class Foo
{
public Foo()
{
// Init some stuff
}
public virtual string DoSomething()
{
// Blah
}
}
public class BarTest
{
[Fact]
public void SomeMethod()
{
var mockFoo = new Mock<Foo>();
mockFoo.Setup(m => m.DoSomething()).Returns("SomeValue");
// This causes a call to `Foo.Foo()`
var result = new Bar(mockFoo.Object).SomeMethod();
result.Should().Be(true);
}
}
我想同样重要的是,我们可以避免它吗?
谢谢!
解决方案
您正在模拟一个具体的类(而不是一个接口)。为此,Moq 将动态创建一个包含子类的类Foo
。
但是,子类总是需要在其基类上调用构造函数,因此这个动态创建的子类将调用Foo
的无参数构造函数。这是 .NET 运行时强加的规则,Moq 无法打破。
推荐阅读
- python - 如何让令牌在一段时间后过期?(没有 jwt)
- android-studio - 无法在 Android Studio 3.5.1 中创建语言环境 strings.xml
- xml - XSLT拆分字符串,将它们存储在变量中并输出它们
- javascript - Angular 8 - 处理 http 返回的 observable 时的管道问题
- object - 在处理中导入 .dae 文件
- spring - 如何在 Spring 中用另一个 RestController 扩展一个 RestController 的路由?
- c# - Neo4j Cypher 具有属性的最短路径
- sql - MariaDB 更新语句的正确语法
- html - CSS - Div 焦点更改蓝色边框突出显示颜色
- tensorflow - 计算多个张量的损失值