【发布时间】:2021-12-26 13:02:25
【问题描述】:
对不起,如果这真的很明显......
我试图理解为什么调用 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的无参数构造函数 -
很棒的解释-谢谢@canton7。你想发帖作为答案吗?这样我可以接受?
-
@LeeTickett 你想要部分模拟吗?如果有,请查看this thread
-
@PeterCsala 我们已经在一些地方这样做了-谢谢:)
-
您确定通话发生在
mockFoo.Object而不是new Mock<Foo>()?