2011-10-19 68 views
2

我有一個具有以下簽名的方法。FakeItEasy&「params」參數

Foo GetFooById(int id, params string[] children) 

該方法在名爲IDal的接口上定義。

在我的單元測試我寫了以下內容:

IDal dal = A.Fake<IDal>(); 

Foo fooToReturn = new Foo(); 
fooToReturn.Id = 7; 

A.CallTo(()=>dal.GetFooById(7, "SomeChild")).Returns(fooToReturn); 

當測試運行,簽名不被在第二個參數匹配。我試圖改變它:

A.CallTo(()=>dal.GetFooById(7, new string[]{"SomeChild"})).Returns(fooToReturn); 

但這也是不成功的。我能得到這個工作的唯一方法是使用:

A.CallTo(()=>dal.GetFooById(7, A<string[]>.Ignored)).Returns(fooToReturn); 

我寧願能夠指定的第二個參數的值,所以如果有人改變它的單元測試將打破。

回答

5

更新:我不確定何時,但問題早已解決。 FakeItEasy 2.0.0支持所需的開箱即用行爲。

在解析調用規範時可能會使用特殊情況的參數數組。請提交問題:https://github.com/patrik-hagne/FakeItEasy/issues?sort=created&direction=desc&state=open

在此之前,最好的解決方法是這樣的:

A.CallTo(() => dal.GetFooById(7, A<string[]>.That.IsSameSequenceAs("SomeChild"))).Returns(fooToReturn); 
+0

突出。起初它仍然沒有工作,但是當我將它更改爲A .That.IsSameSequenceAs(新字符串[] {「SomeChild」})它像一個魅力。 –

+0

我也根據要求在github上添加了一個問題。 –

+0

太好了,我會盡力解決問題。 –