2017-08-25 80 views
1

我需要測試是否使用指定參數調用方法GetKey(object target)。我知道驗證可以稱爲如何使用指定參數設置/驗證方法調用

processor.Verify(x => x.GetKey(It.Is<object>(y => y == target))); 

但是應該如何設置?

processor.Setup(x => x.GetKey(It.Is<object>(y => y == target))); 

processor.Setup(x => x.GetKey(It.IsAny<object>())); 

是什麼在這兩個設置有什麼區別?在這種情況下真的很重要嗎?

處理器接口:

public interface ILayoutProcessor 
{ 
    object GetKey(object target); 
} 
+0

怎樣的方法'的完整簽名GetKey'是什麼樣子?它返回一些東西?這兩個設置是不同的,第一個是針對'target'的,其次是針對任何'object'。 – dee

+0

我知道'It.Is'和'It.IsAny'之間的區別。如果我想在參數上使用不同的'Callback'或'Return',我會使用'It.Is',但如果我不關心返回值,我可以在'Setup'中使用'It.IsAny' 'Verify'中有'It.Is'? –

+1

是的,我認爲你可以。 – dee

回答

1

只是通過指定的參數在SetupVerify方法表達

processor.Setup(x => x.GetKey(target)).Verifiable(); 

後來驗證

processor.Verify(); 

processor.Verify(x => x.GetKey(target), Times.AtLeastOnce); 
1
processor.Setup(x => x.GetKey(It.Is<object>(y => y == target))); 

是一個設置,用於調用方法時使用的對象與指定條件匹配。

processor.Setup(x => x.GetKey(It.IsAny<object>())); 

是一種設定,將匹配任何對象的說法。

在您的情況下,如果您只想驗證該方法是否使用某個參數進行調用,則使用哪種設置無關緊要。事實上,如果你的函數的返回值沒有被使用,你甚至不需要設置就能夠驗證。然而,在你的情況下,我認爲你做了,因爲你在評論中提到CallbackReturns

注意,您可以縮短您的驗證簡單:

processor.Verify(x => x.GetKey(target)); 
相關問題