【问题标题】:Mocking virtual readonly properties with moq使用 moq 模拟虚拟只读属性
【发布时间】:2010-11-30 01:32:36
【问题描述】:

我找不到这样做的方法,虽然这可以手动完成,所以为什么不使用 moq 呢?

【问题讨论】:

    标签: unit-testing tdd mocking 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 属性只是一个语法糖方法,因此,如果您将该陈述得出其合乎逻辑的结论,您会说最好不要使用返回数据的方法。我一点也不同意。
    • 好点。你能建议我如何将这些吸气剂注入一个具体的(非模拟)类吗?
    • 抱歉,如果我没有多大意义,那是问题的一部分,我只需要一种方式来表达/描述这一点
    猜你喜欢
    • 2012-04-29
    • 2012-08-03
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多