2012-01-26 1 views
0

私はモックする必要のあるデバイスを持っています。最後の設定値に応じて、デバイス上のステータスフラグが変化します。私はこの行動を嘲笑する必要があります。2つのRhinoモックコールの時間相関を表現するにはどうすればいいですか

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

私はそれを追跡する別のオブジェクトの助けを借りて動作するようになった。礎の1つは、そのプロパティの1つを返そうとするのではなく、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()); 
    } 
関連する問題