2011-09-27 57 views
2

我正在嘗試爲使用拼寫校正器的一段代碼設置單元測試。我將代碼正確地依賴注入,因此在Rhinomocks中設置存根並不是問題,但爲測試創建的文本塊長達50個字,我確實不會有50行代碼看起來是這樣的:是否可以訓練Rhinomocks進行任意輸入?

spellingCorrector.Stub(x => x.CorrectWord("the")).Return("the"); 
spellingCorrector.Stub(x => x.CorrectWord("boy")).Return("boy"); 
spellingCorrector.Stub(x => x.CorrectWord("ran")).Return("ran"); 

爲了我的單元測試的目的,我認爲假設單詞拼寫正確沒關係。有沒有辦法讓Rhinomocks簡單地遵循規則有關返回,東西的效果:

spellingCorrector.Stub(x => x.CorrectWord(y)).Return(y); 

回答

3

你可以使用IgnoreArguments()方法:

spellingCorrector 
    .Stub(x => x.CorrectWord(null)) 
    .IgnoreArguments() 
    .Return(y); 

這樣,不管是通過什麼樣的價值到CorrectWord方法,它將返回y


UPDATE:

您的評論後,它更清晰:

Func<string, string> captureArg = arg => arg; 
spellingCorrector.Stub(x => x.CorrectWord(null)).IgnoreArguments().Do(captureArg); 

這將使用任何值作爲參數作爲返回值傳遞。如果您需要對此返回值執行一些轉換,請修改captureArg委託。

+0

關閉,但不是我需要相當的。我需要它來回報投入的東西,而不是每次都是這樣。 – tmesser

+0

@YYY,啊我明白你想要什麼。請參閱我的更新。 –

+0

美麗,謝謝。 – tmesser

0

對於任何複雜的事情,而不是使用RhinoMocks,寫你自己的小存根類。我會用一個所有應該糾正的單詞的詞典來支持它,如果它不在詞典中,則返回單詞。

模仿只是爲了使這種事情更容易。如果使用mock並不容易(或者更重要的是,可讀性更強),那麼只需編寫代碼即可。

0

如果你不是特別重視Rhinomock,您可以使用Moq

spellingCorrector.Setup(x => x.CorrectWord(It.IsAny<string>())) 
    .Returns(x => x); 
相關問題