Moq如何使用包含特定值的列表来确定方法

use*_*657 10 c# moq

嗨说我有一个带有以下签名的方法:

public void GeneratePaymentAdvise(IList<int> paymentIds)
Run Code Online (Sandbox Code Playgroud)

这是通过另一种方法调用的:

public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic)
{
 ...
   paymentLogic.GeneratePaymentStatus(paymentIds);
 ...
}
Run Code Online (Sandbox Code Playgroud)

所以在单元测试中,我想确保调用它.使用moq:

var mockPaymentLogic = new Mock<PaymentLogic>();

UpdatePaymentStatus(new List<int> { 2, 3 }, mockPaymentLogic.Object);

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.IsAny<IList<int>>());
Run Code Online (Sandbox Code Playgroud)

所以这可以正常工作并检查GeneratePaymentStatus是否被调用,但只有使用任何旧的int列表调用.

有没有办法重写这个,所以它测试GeneratePaymentStatus是用一个包含2和3的整数列表调用的?

小智 16

像这样的东西:

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.Is<IList<int>>(l => l.Contains(2) && l.Contains(3))));
Run Code Online (Sandbox Code Playgroud)