gpt4 book ai didi

c# - RhinoMocks 在方法未被调用时返回值

转载 作者:太空宇宙 更新时间:2023-11-03 20:20:09 26 4
gpt4 key购买 nike

我想做以下...

在调用某个方法之前,某个属性必须始终返回值 x调用方法后,某个属性必须始终返回值 y

我熟悉 RhinoMocks 中的 WhenCalled 方法,它允许我在调用方法后设置返回值,但我想不出在调用前设置返回值的方法。到目前为止,我有以下代码...

counter.Expect(n => n.IncreaseCounter())
.WhenCalled(i => counter.Expect(n => n.GetCounter)
.Return(Y).Repeat.Any());

这可能吗?

最佳答案

有 2 种解决方案可以解决这个问题:

  1. 使用WhenCalled():

    var counter = MockRepository.GenerateStub<ICounter>();

    int cnt = 1;

    counter
    .Stub(c => c.GetCounter)
    .Return(0)
    .WhenCalled(invocation => { invocation.ReturnValue = cnt; });

    counter
    .Stub(c => c.IncreaseCounter())
    .WhenCalled(invocation => { ++cnt; });
  2. 使用Do()处理程序

    var counter = MockRepository.GenerateStub<ICounter>();

    int cnt = 1;

    counter
    .Stub(c => c.GetCounter)
    .Do((Func<int>)(() => cnt));

    counter
    .Stub(c => c.IncreaseCounter())
    .Do((Action)(() => ++cnt));

这两种情况的想法是相同的:最初 GetCounter 返回 1。每个 IncreaseConter() 调用都会增加 GetCounter 返回的值。

附言
如果您不打算对 counter 进行断言,那么使用 Stub() 而不是 Expect() 可能更合适。参见例如this question了解详情。

关于c# - RhinoMocks 在方法未被调用时返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14098970/

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