我有一个需要嘲笑的设备。根据最后设置的值,设备上的状态标志会发生变化。我需要嘲笑这种行为。
这是一些不起作用的伪代码:
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。
我如何正确表达这种耦合行为。
答案 0 :(得分:0)
我得到了另一个跟踪我的对象的帮助。其中一个基石是使用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());
}