C# 如何表示两个Rhino模拟调用的时间相关性
我有一个需要模仿的装置。根据上次设置的值,设备上的statusflag会发生变化。我需要嘲笑这种行为 以下是一些不起作用的伪代码:C# 如何表示两个Rhino模拟调用的时间相关性,c#,rhino,C#,Rhino,我有一个需要模仿的装置。根据上次设置的值,设备上的statusflag会发生变化。我需要嘲笑这种行为 以下是一些不起作用的伪代码: private delegate void setvalue(Value val); ... Value lower = new Value(1); Value higher = new Value(7); ISweetInterface mock = setupSweetInterface(); Boolean flagreturn = false; mock.E
private delegate void setvalue(Value val);
...
Value lower = new Value(1);
Value higher = new Value(7);
ISweetInterface mock = setupSweetInterface();
Boolean flagreturn = false;
mock.Expect(x => x.Lower).Return(lower);
mock.Expect(x => x.SetValue(lower))
.Do(new setvalue(delegate(Value val) { flagreturn = true; }));
mock.Expect(x => x.SetValue(higher))
.Do(new setvalue(delegate(Value val) { flagreturn = false; }));
mock.Expect(x => x.CheckFlag()).Return(flagreturn);
Mockuser tested = new Mockuser(mock)
Assert.IsTrue(tested.setLowerAndCheckFlag());
Assert.IsFalse(tested.setHigherAndCheckFlag());
根据上次设置的值,设备上的标志必须更改。我认为我的代表实际上看不到信号灯返回。我编写的代码可以编译,但CheckFlag()总是返回false
如何正确地表达这种耦合行为。我让它在另一个跟踪我的对象的帮助下工作。其中一个基础是使用DO调用新对象,而不仅仅是尝试返回它的一个属性 下面是一些伪代码来说明:
private class mockdevice
{
public List<Value> listOfTrueReturn = new List<Value>();
private Boolean flagvalue = false;
public bool flag()
{
return flagvalue;
}
public void setvalue(Value val)
{
if (listOfTrueReturn.Contains(val))
{
flagvalue = true;
}
else
{
flagvalue = false;
}
}
}
private delegate void setvalue(Value val);
private delegate Boolean getflag();
[Test]
public void shouldAnswerStackoverflowQuestion()
{
float d = 5f;
Value lower = new Value(-d, 0f, unit);
Value higher = new Value(d, 0f, unit);
mockdevice md = new mockdevice();
md.listOfTrueReturn.Add(higher);
IFindFlagDataObject mock = setupmock();
mock.Expect(x => x.Lower).Return(lower);
mock.Expect(x => x.Higher).Return(higher);
mock.Expect(x => x.CheckFlag()).Do(new getflag(md.flag)).Repeat.Times(2);
mock.Expect(x => x.SetValue(Arg<Value>.Is.Anything)).Do(new setvalue(md.setvalue)).Repeat.Times(2);
FindFlagStrategy tested = new FindFlagStrategy(mock);
tested.FindFlagValue();
mock.VerifyAllExpectations();
Mockuser tested = new Mockuser(mock)
Assert.IsTrue(tested.setLowerAndCheckFlag());
Assert.IsFalse(tested.setHigherAndCheckFlag());
}
私有类模拟设备
{
public List listOfTrueReturn=new List();
私有布尔flagvalue=false;
公共布尔旗()
{
返回值;
}
公共无效设置值(值val)
{
if(listOfTrueReturn.Contains(val))
{
flagvalue=true;
}
其他的
{
flagvalue=false;
}
}
}
私有委托无效设置值(值val);
私有委托布尔getflag();
[测试]
public void应回答StackOverflowQuestion()
{
浮点数d=5f;
值下限=新值(-d,0f,单位);
较高值=新值(d,0f,单位);
mockdevice md=新的mockdevice();
md.listOfTrueReturn.Add(更高);
IFindFlagDataObject mock=setupmock();
mock.Expect(x=>x.Lower)。Return(Lower);
mock.Expect(x=>x.Higher),Return(Higher);
Expect(x=>x.CheckFlag()).Do(newgetflag(md.flag)).Repeat.Times(2);
mock.Expect(x=>x.SetValue(Arg.Is.Anything)).Do(newsetvalue(md.SetValue)).Repeat.Times(2);
FindFlagStrategy tested=新的FindFlagStrategy(模拟);
tested.FindFlagValue();
mock.verifyallexpections();
Mockuser tested=新Mockuser(mock)
Assert.IsTrue(tested.setLowerAndCheckFlag());
Assert.IsFalse(tested.setHigherAndCheckFlag());
}