2017-08-25 64 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)); 
相关问题