Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何表示两个Rhino模拟调用的时间相关性_C#_Rhino - Fatal编程技术网

C# 如何表示两个Rhino模拟调用的时间相关性

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

我有一个需要模仿的装置。根据上次设置的值,设备上的statusflag会发生变化。我需要嘲笑这种行为

以下是一些不起作用的伪代码:

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());
}