当我尝试设置一个模拟有PropertyBehavior()我收到此错误:

  

System.InvalidOperationException信息:System.InvalidOperationException:       无效的调用,最后调用已被使用或没有呼叫的情况下(请确保您调用虚拟(C#)/可重写(VB)方法)..

我想只使用犀牛嘲笑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);
    }

我知道(上面我应该和代码)我可以用一个存根,但我努力学习犀牛制品。

最后,我希望能够确保多个属性都有自己的价值观访问。 (关于如何检查form.FirstName任何提示被访问(即,吸气剂被称为)也将被理解的。)

在情况下,它是需要的,在这里是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; }
    }
}

总之,我认为,虚拟不会是因为我传递一个接口有问题,但我清楚地失去了一些东西。

有帮助吗?

解决方案

从未使用过PropertyBehavior,但是这是你要找的语法?

form.Stub(x=>x.OKButtonEnabled).PropertyBehavior()

犀牛制品的工作原理完全穿过扩展方法现在。唯一的静态调用我每做任何更多的是MockRepository.GenerateStub

其他提示

您使用存根提到一个模拟的,而不是,但你去改变它之前,我想指出,奇怪的是,我得到的非法呼叫例外,当我用GenerateStub但不是当我使用GenerateMock。

View = MockRepository.GenerateStub<IAddressView>();
View.Stub(v => v.Message).PropertyBehavior();

此抛出无效的调用异常和肯定的,IAddressView.Message确实有getter和setter。

当我试图设置在非虚拟方法的期望我接收到该错误。

mockedObject.Expect(a => a.NonVirtualMethod()).Returns(null);

在错误走时,我NonVirtualMethod虚拟

我认为你必须做MockRepository.ReplyAll()设置了所有人的预期后,你开始使用这个假之前。所以,我在你的情况的猜测是,你必须移动前调解=新AddAddressMediator(形式)的Expect.Call线,和在此贴回复毕竟正确的:

[TestInitialize()]
public void MyTestInitialize()
{
    form = MockRepository.GenerateMock<IAddAddressForm>();
    // 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();

    MockRepository.ReplyAll();
    mediator = new AddAddressMediator(form);



}

我就遇到了这个问题,当我试图在C#中的对象上调用一个internal属性(仅吸气剂)。在这种情况下,添加.PropertyBehavior()没有帮助。

我的解决办法,以提取逻辑出的属性的并进入内部方法,其余然后注入依赖性到此方法(作为参数)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top