При использовании C # Moq-теста получается несоответствие количества параметров? - PullRequest
0 голосов
/ 16 марта 2019

Я знаю, что есть похожие вопросы, но я не могу понять ситуацию в моем случае.Я получаю исключение несоответствия счетчика Paramater.

Вот как я регистрирую свой макет,

    var couponService = 
     DependencyResolver.Resolve<Mock<ICouponWebServiceAdapter>>();
        couponService.Setup(a => 
     a.checkCouponAvailability(It.IsAny<orderLine[]>(), 
            It.IsAny<orderHeader>()))
            .Returns((couponDetail[] request) =>
            {

                var coupon = new couponDetail
                {
                    description = "75% off the original price",
                    value = 50
                };

                var coupon1 = new couponDetail
                {
                    description = "500 off the original price",
                    value = 20
                };

                var coupondetails = new couponDetail[] { coupon, coupon1 };
                return coupondetails;
            });

checkCouponAvailability возвращает couponDetail []

Что я делаю не так?Я пытался выставить свое возвращение как IQueryable

1 Ответ

1 голос
/ 16 марта 2019

Похоже, что внутри метода Returns вы указываете параметр с именем request типа couponDetail[], но сам метод принимает параметры (orderLine[], orderHeader). Метод, который вставлен в Returns, вызывается с фактическими параметрами, которые передаются в ваш смоделированный метод, что вызовет полученное вами исключение ParameterCountMismatchException.

  1. Вы можете передать нужный литеральный объект, посмеявшись над своим возвратом, прежде чем насмехаться над функцией. Пример ниже:
var coupondetails = new couponDetail[] {
    new couponDetail
    {
        description = "75% off the original price",
        value = 50
    },
    new couponDetail
    {
        description = "500 off the original price",
        value = 20
    }
};
var couponService = DependencyResolver.Resolve<Mock<ICouponWebServiceAdapter>>();

couponService
    .Setup(a => a.checkCouponAvailability(It.IsAny<orderLine[]>(), It.IsAny<orderHeader>()))
    .Returns(coupondetails);
  1. Вы можете передать в метод метод, который ДОЛЖЕН принимать все аргументы, переданные в исходный метод. Пример ниже:
var couponService = DependencyResolver.Resolve<Mock<ICouponWebServiceAdapter>>();

couponService
    .Setup(a => a.checkCouponAvailability(It.IsAny<orderLine[]>(), It.IsAny<orderHeader>()))
    .Returns((orderLine[] arg1, orderHeader arg2) => {
        return new couponDetail[] {
            new couponDetail
            {
                description = "75% off the original price",
                value = 50
            },
            new couponDetail
            {
                description = "500 off the original price",
                value = 20
            }
        };
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...