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

C# Moq如何确定使用包含特定值的列表调用方法,c#,moq,C#,Moq,您好,我有一个具有以下签名的方法: public void GeneratePaymentAdvise(IList<int> paymentIds) public void GeneratePaymentAdvise(IList PaymentId) 这是由另一个方法调用的: public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic) { ... paym

您好,我有一个具有以下签名的方法:

public void GeneratePaymentAdvise(IList<int> paymentIds)
public void GeneratePaymentAdvise(IList PaymentId)
这是由另一个方法调用的:

public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic)
{
 ...
   paymentLogic.GeneratePaymentStatus(paymentIds);
 ...
}
public void UpdatePaymentStatus(IList PaymentId、IPaymentLogic paymentLogic)
{
...
paymentLogic.GeneratePaymentStatus(PaymentId);
...
}
所以在单元测试中,我想确保调用了它。使用最小起订量:

var mockPaymentLogic = new Mock<PaymentLogic>();

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

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.IsAny<IList<int>>());
var mockPaymentLogic=new Mock();
UpdatePaymentStatus(新列表{2,3},mockPaymentLogic.Object);
验证(x=>x.GeneratePaymentStatus(It.IsAny());
因此,这将很好地工作,并检查是否调用了GeneratePaymentStatus,但仅使用任何旧的Int列表调用了GeneratePaymentStatus

有没有办法重写它,以便测试GeneratePaymentStatus是否使用包含2和3的int列表调用?

类似的内容:

mockPaymentLogic.Verify(x => x.GeneratePaymentStatus(It.Is<IList<int>>(l => l.Contains(2) && l.Contains(3))));
mockPaymentLogic.Verify(x=>x.GeneratePaymentStatus(它是(l=>l.Contains(2)和&l.Contains(3));

为什么不使用同一个int数组进行验证呢?类似这样的

[TestClass]
public class SomeClassTests
{
    [TestMethod]
    public void UpdatePaymentStatus_PaymentIds_VerifyPaymentLogicGeneratePaymentStatus() {
        var mock = new Mock<IPaymentLogic>();
        var sut = new Sut();
        var idList = new List<int> {2, 3};

        sut.UpdatePaymentStatus(idList, mock.Object);

        mock.Verify(x => x.GeneratePaymentStatus(idList));
    }
}

public class Sut {
    public void UpdatePaymentStatus(IList<int> paymentIds, IPaymentLogic paymentLogic) {
        paymentLogic.GeneratePaymentStatus(paymentIds);
    }
}

public interface IPaymentLogic {
    void GeneratePaymentStatus(IList<int> paymentIds);
}
[TestClass]
公共类测试
{
[测试方法]
public void UpdatePaymentStatus\u PaymentId\u VerifyPaymentLogicGeneratePaymentStatus(){
var mock=new mock();
var sut=新sut();
var idList=新列表{2,3};
sut.UpdatePaymentStatus(idList、mock.Object);
验证(x=>x.GeneratePaymentStatus(idList));
}
}
公共类Sut{
public void UpdatePaymentStatus(IList PaymentId、IPaymentLogic paymentLogic){
paymentLogic.GeneratePaymentStatus(PaymentId);
}
}
公共接口IPaymentLogic{
作废GeneratePaymentStatus(IList PaymentId);
}
如果根据idList以外的其他列表进行验证,测试将失败