无效的调用,最后调用已使用或不已经调用
-
18-09-2019 - |
题
当我尝试设置一个模拟有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()
没有帮助。
我的解决办法,以提取逻辑出的属性的并进入内部方法,其余然后注入依赖性到此方法(作为参数)。