呼叫无效,最后一次呼叫已被使用或未进行任何呼叫

Vac*_*ano 19 c# rhino-mocks visual-studio-2008 visual-studio rhino-mocks-3.5

当我尝试设置模拟时,我收到此错误PropertyBehavior():

System.InvalidOperationException:System.InvalidOperationException:无效调用,最后一次调用已被使用或未进行任何调用(请确保您正在调用虚拟(C#)/ Overridable(VB)方法).

我试图只使用Rhino Mocks 3.5(安排,行动,断言)

这是我的代码:

    private IAddAddressForm form;

    private AddAddressMediator mediator;

    [TestInitialize()]
    public void MyTestInitialize()
    {
        form = MockRepository.GenerateMock<IAddAddressForm>();
        mediator = new AddAddressMediator(form);


        // Make the properties work like a normal property
        Expect.Call(form.OKButtonEnabled).PropertyBehavior();

        //I tried this too.  I still get the exception
        //SetupResult.For(form.OKButtonEnabled).PropertyBehavior();
    }


    [TestMethod]
    public void TestOKButtonEnabled()
    {

        form.OKButtonEnabled = true;
        Assert.IsTrue(form.OKButtonEnabled);
    }
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用存根(对于我应该使用的代码),但我正在尝试学习Rhino Mocks.

最终,我希望能够确保访问多个属性的值.(关于如何检查form.FirstName访问的任何提示(即调用getter)也将不胜感激.)

如果需要,以下代码IAddressForm:

namespace AddressBook
{
    public interface IAddAddressForm
    {
        string FirstName { get; set; }
        string LastName { get; set; }
        string Address1 { get; set; }
        string State { get; set; }
        string Address2 { get; set; }
        string ZipCode { get; set; }
        string City { get; set; }
        bool OKButtonEnabled { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我认为虚拟不会成为问题因为我在界面中传递,但我显然遗漏了一些东西.

Geo*_*uer 10

从未使用PropertyBehavior过,但这是您正在寻找的语法吗?

form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()
Run Code Online (Sandbox Code Playgroud)

Rhino Mocks现在完全通过扩展方法工作.我每次做的唯一静态电话就是MockRepository.GenerateStub.

  • 是的,扩展方法是静态的.澄清一下:在使用Rhino Mocks而不是传统的静态调用时,建议您使用扩展方法. (5认同)
  • 扩展方法*是*静态的。 (2认同)