为什么调用 someMockInstance.Object 会调用构造函数?
Why does calling someMockInstance.Object call constructor?
抱歉,如果这真的很明显...
我试图理解为什么调用 someMockInstance.Object
会调用 class 构造函数。
这是一个例子:
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);
}
}
而且我想同样重要的是,我们可以避免它吗?
谢谢!
您正在模拟具体的 class(而不是接口)。为此,Moq 将动态创建一个 class 子class 是 Foo
.
然而,subclasses 总是需要在其基础 class 上调用构造函数,因此这个动态创建的 subclass 将调用 Foo
的无参数构造函数。这是 .NET 运行时强加的规则,Moq 无法打破。
抱歉,如果这真的很明显...
我试图理解为什么调用 someMockInstance.Object
会调用 class 构造函数。
这是一个例子:
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);
}
}
而且我想同样重要的是,我们可以避免它吗?
谢谢!
您正在模拟具体的 class(而不是接口)。为此,Moq 将动态创建一个 class 子class 是 Foo
.
然而,subclasses 总是需要在其基础 class 上调用构造函数,因此这个动态创建的 subclass 将调用 Foo
的无参数构造函数。这是 .NET 运行时强加的规则,Moq 无法打破。