Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Rhinomock在未调用方法时返回值_C#_Rhino Mocks - Fatal编程技术网

C# Rhinomock在未调用方法时返回值

C# Rhinomock在未调用方法时返回值,c#,rhino-mocks,C#,Rhino Mocks,我想做以下事情 在调用方法之前,某个属性必须始终返回值x 调用方法后,某个属性必须始终返回值y 我熟悉RhinoMocks中的WhenCalled方法,它允许我在调用该方法之后设置返回值,但我想不出在调用之前设置返回值的方法。到目前为止,我有以下代码 counter.Expect(n => n.IncreaseCounter()) .WhenCalled(i => counter.Expect(n => n.GetCounter) .Return(Y).Repeat

我想做以下事情

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

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

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

这可能吗?

有两种解决方案:

  • 在调用()时使用
    WhenCalled()

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

    PS

    如果您不打算对
    计数器执行断言
    ,那么可能适合使用
    Stub()
    而不是
    Expect()
    来设置它。有关详细信息,请参见示例。

    只需在模拟方法的回调中为属性设置新的返回值:

    Mock<IFoo> fooMock = new Mock<IFoo>();
    fooMock.Setup(foo => foo.Property).Returns(1);
    fooMock.Setup(foo => foo.Method())
           .Callback(() => fooMock.Setup(x => x.Property).Returns(42));
    
    Mock fooMock=new Mock();
    Setup(foo=>foo.Property).Returns(1);
    fooMock.Setup(foo=>foo.Method())
    .Callback(()=>fooMock.Setup(x=>x.Property).Returns(42));
    

    Mocked属性将返回
    1
    ,直到调用Mocked方法为止。然后其返回值将设置为
    42
    。根据Alexander的解决方案,所有对mocked属性的进一步调用将返回
    42

    。。。以下是我一直在寻找的

    var counter = MockRepository.GenerateStub<ICounter>();
    
    int x = 1;
    int y = 2;
    int cnt = x;
    
    counter
        .Stub(c => c.GetCounter)
        .Return(0)
        .WhenCalled(invocation =>
        {
            invocation.ReturnValue = cnt;
            cnt = y;
        });
    
    var counter=MockRepository.GenerateStub();
    int x=1;
    int y=2;
    int cnt=x;
    柜台
    .Stub(c=>c.GetCounter)
    .返回(0)
    .WhenCalled(调用=>
    {
    invocation.ReturnValue=cnt;
    cnt=y;
    });
    
    Oops,我的坏:)将很快修复Anks Alex,这很有帮助,而且是我想要的。。。稍加修改
    Mock<IFoo> fooMock = new Mock<IFoo>();
    fooMock.Setup(foo => foo.Property).Returns(1);
    fooMock.Setup(foo => foo.Method())
           .Callback(() => fooMock.Setup(x => x.Property).Returns(42));
    
    var counter = MockRepository.GenerateStub<ICounter>();
    
    int x = 1;
    int y = 2;
    int cnt = x;
    
    counter
        .Stub(c => c.GetCounter)
        .Return(0)
        .WhenCalled(invocation =>
        {
            invocation.ReturnValue = cnt;
            cnt = y;
        });