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以外的其他列表进行验证,测试将失败