使用 moq 模拟虚拟只读属性
Posted
技术标签:
【中文标题】使用 moq 模拟虚拟只读属性【英文标题】:Mocking virtual readonly properties with moq 【发布时间】:2010-11-30 01:32:36 【问题描述】:我找不到这样做的方法,虽然这可以手动完成,所以为什么不使用 moq 呢?
【问题讨论】:
【参考方案1】:您需要确保属性是虚拟的才能完成这项工作。
【讨论】:
当回答一个已被接受的旧问题时,请尝试给出一个答案,该答案要么添加新内容,要么对它有帮助。由于您当前的答案现在是评论而不是答案。除了说明需要确保什么才能工作之外,通常还包括一个关于如何做到这一点的具体示例会更有帮助。另请参阅contribution guide 以供参考。【参考方案2】:给定这个类
public abstract class MyAbstraction
public virtual string Foo
get return "foo";
您可以像这样设置 Foo(只读属性):
var stub = new Mock<MyAbstraction>();
stub.SetupGet(x => x.Foo).Returns("bar");
stub.Object.Foo
现在将返回“bar”而不是“foo”。
【讨论】:
优秀的答案谢谢。换句话说,最好不要只使用 getter 属性,因为它们很难模拟? 你看我有一堆只读属性:drive.google.com/file/d/0ByqKtGmtuLzZNFhwTWhMMGVRZnc/… 我正在尝试使用它们的父类作为被测系统,所以我不确定我将如何设置最小起订量,因为被测系统不是模拟类,而我想从这些 getter 中强制一个值 @l--''''''---------'''''''''''''''''''' 一个 get-only 属性只是一个语法糖方法,因此,如果您将该陈述得出其合乎逻辑的结论,您会说最好不要使用返回数据的方法。我一点也不同意。 好点。你能建议我如何将这些吸气剂注入一个具体的(非模拟)类吗? 抱歉,如果我没有多大意义,那是问题的一部分,我只需要一种方式来表达/描述这一点以上是关于使用 moq 模拟虚拟只读属性的主要内容,如果未能解决你的问题,请参考以下文章