抱歉,如果这真的很明显......
我试图理解为什么调用 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);
}
}
我想同样重要的是,我们可以避免它吗?
谢谢!
最佳答案
您正在 mock 一个具体的类(而不是一个接口(interface))。为此,Moq 将动态创建一个类,该类是 Foo
的子类。
但是,子类总是需要调用其基类的构造函数,因此这个动态创建的子类将调用 Foo
的无参数构造函数。这是 .NET 运行时强加的规则,Moq 无法打破。
关于c# - 为什么调用 someMockInstance.Object 会调用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69972419/