代码之家  ›  专栏  ›  技术社区  ›  BlackWasp

是否可以在Expect.Call in Rhinomocks期间设置对象的属性值?

  •  2
  • BlackWasp  · 技术社区  · 16 年前

    我有一个方法,只有当特定对象的属性设置为false时才应该调用它。这是它的初始值。在第一次调用之后,属性设置为true,以确保调用只进行一次。

    但是,当我模拟执行此更改的类时,模拟对象不会更改基础对象的属性。

    有没有一种方法可以迫使一个对象的属性发生变化,那就是对所满足的期望做出响应?

    有点像…

    Expect.Call(mockedObject.TestMethod(underlyingObject)).NowDoThis(delegate() { underlyingObject.Processed = true; });
    
    2 回复  |  直到 16 年前
        1
  •  3
  •   Mendelt    16 年前

    对,

    而不是nowdothis()调用try do()。


    终于到家了,我可以尝试一些代码。

    技巧是将匿名委托强制转换为从System.Delegate派生的类型操作(类型MethodInvoker也可以工作,但该类型仅在System.Windows.Forms中可用)

    这是密码。我更熟悉Rhino Mocks AAA语法。如果必须将其转换为预期值,请通知我。调用语法。我也在使用xunit.net,[fact]的意思是[test]

    public interface Thingie
    {
        bool Flag { get; set; }
        void DoSomething();
    }
    
    [Fact]
    public void Test()
    {
        var thingie = MockRepository.GenerateStub<Thingie>();
    
        thingie.Stub(x => x.DoSomething()).Do((Action) delegate { thingie.Flag = true; });
    
        Assert.False(thingie.Flag);
    
        thingie.DoSomething();
    
        Assert.True(thingie.Flag);
    }
    
        2
  •  0
  •   Judah Gabriel Himango    16 年前

    假设mockedObject实际上是一个mock对象,您可以在调用测试方法后简单地为属性设置一个返回值:

    bool isProcessed = false;
    Expect.Call(mockedObject.TestMethod(underlyingObject))
       .Do(new Action(() => isProcessed = true));
    
    SetupResult.For(mockedObject.Processed).Return(isProcessed);