gpt4 book ai didi

c# - 你能模拟一个实现接口(interface)和抽象类的对象吗?

转载 作者:可可西里 更新时间:2023-11-01 09:12:16 25 4
gpt4 key购买 nike

是否可以使用 Moq模拟一个实现接口(interface)和抽象类的对象?

即:

public class MyClass: SomeAbstractClass, IMyClass

你能 mock 这个吗?

最佳答案

您可以模拟任何接口(interface)以及任何抽象或虚拟成员。基本上就是这样。

这意味着以下情况是绝对可能的:

var imock = new Mock<IMyClass>();
var aMock = new Mock<SomeAbstractClass>();

如果继承自 SomeAbstractClass 的成员没有被密封,你也可以 mock MyClass:

var mcMock = new Mock<MyClass>();

这是否有意义取决于 MyClass 的实现。假设 SomeAbstractClass 定义如下:

public abstract class SomeAbstractClass
{
public abstract string GetStuff();
}

如果MyClass中的GetStuff方法是这样实现的,你仍然可以覆盖它:

public override string GetStuff()
{
return "Foo";
}

这将允许你写:

mcMock.Setup(x => x.GetStuff()).Returns("Bar");

因为除非明确密封,否则 GetStuff 仍然是虚拟的。但是,如果您这样编写 GetStuff:

public override sealed string GetStuff()
{
return "Baz";
}

你不能 mock 它。在这种情况下,您会从 Moq 得到一个异常,指出它是对非虚拟成员的无效覆盖(因为它现在是 sealed)。

关于c# - 你能模拟一个实现接口(interface)和抽象类的对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1969497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com