我怎樣才能用參數來模擬一個無效方法並更改值參數?模擬一個改變輸入值的無效方法
我想測試一個類(SomeClassA),它對另一個類(SomeClassB)有依賴性。我想嘲笑SomeClassB。
public class SomeClassA
{
private SomeClassB objectB;
private bool GetValue(int x, object y)
{
objectB.GetValue(x, y); // This function takes x and change the value of y
}
}
SomeClassB實現接口的IFoo
public interface IFoo
{
public void GetValue(int x, SomeObject y) // This function takes x and change the value of y
}
pulic class SomeClassB : IFoo
{
// Table of SomeObjects
public void GetValue(int x, SomeObject y)
{
// Do some check on x
// If above is true get y from the table of SomeObjects
}
}
然後在我的單元測試類,我製備的委託類模仿SomeClassB.GetValue:
private delegate void GetValueDelegate(int x, SomeObject y);
private void GetValue(int x, SomeObject y)
{ // process x
// prepare a new SomeObject obj
SomeObject obj = new SomeObject();
obj.field = x;
y = obj;
}
在我寫的模擬部分:
IFoo myFooObject = mocks.DynamicMock();
Expect.Call(delegate { myFooObject.Getvalue(5, null); }).Do(new GetValueDelegate(GetValue)).IgnoreArguments().Repeat.Any();
SomeObject o = new SomeObject();
myFooObject.getValue(5, o);
Assert.AreEqual(5, o.field); // This assert fails!
我檢查了幾個帖子,委託似乎是嘲笑無效方法的關鍵。 但是,嘗試上述後,它不起作用。你能否建議我的代表班有什麼問題?或在模擬陳述中出現錯誤?
我RhinoMocks是3.5,好像它丟棄做兼職,如果我有IgnoreArguments() 我剛剛找到了這個網頁: http://www.mail-archive.com/[email protected]/msg00287.html
現在我已經改變了
Expect.Call(委託{myFooObject.Getvalue(5,null);})。 Do(new GetValueDelegate(GetValue))。IgnoreArguments() .Repeat.Any();
到
Expect.Call(委託{myFooObject.Getvalue(5,NULL);})。IgnoreArguments()。 Do(new GetValueDelegate(GetValue)) .Repeat.Any();
現在它工作得很好!
我不太清楚你的問題。你可以發佈你想要測試的方法取決於IFoo嗎? – 2010-04-19 11:40:54
嗨,爲了使您的GetValue工作,您需要將參數標記爲ref。你能發佈真正有用的方法嗎? – Grzenio 2010-04-19 13:15:10
嗨Darin和Grzenio,我剛剛編輯上面進一步闡述了這個問題。提前致謝! – Kar 2010-04-20 01:56:41