Модульный тест для закрытого метода делегата Func с использованием зеркала MBUnit - PullRequest
2 голосов
/ 19 августа 2011

Я хотел бы протестировать следующий класс Private Func<> метод делегата с использованием MB Units Mirror.ForObject(). Однако это не отражает метод. Может ли кто-нибудь предоставить способ сделать это?

Функциональный код класса

public class AccountTransaction
    {
        private static readonly Func<decimal, decimal, decimal> NetAmountCalculator = (discountedValue, discountPecentage) => discountPecentage == 100 ? 0 : Math.Round(discountedValue / (1 - (discountPecentage / 100)), 2);
    }

Метод испытания

        /// <summary>
        /// NetAmountCalculator in normal flow
        /// </summary>
        [Test]
        public void NetAmountCalculatorTest()
        {
            var cashTransaction = Mirror.ForObject(new AccountTransaction());
            decimal discountedAmount = 90;
            decimal discountPecentage = 10;
            cashTransaction["NetAmountCalculator"].Invoke(discountedAmount , discountPecentage);
            Assert.IsTrue(true);
        }

Я ссылался Справка MBUint , а также еще одна приятная помощь от Google Code

1 Ответ

3 голосов
/ 19 августа 2011

NetAmountCalculator - это поле вашего класса. Это не метод или свойство , и поэтому вы не можете вызвать его (даже если это действительно делегат, поэтому он выглядит как метод). Что вам нужно сделать, это получить значение поля, правильно его разыграть, и только тогда вы сможете оценить результат, который он возвращает.

var cashTransaction = Mirror.ForObject(new AccountTransaction());
decimal discountedAmount = 90;
decimal discountPecentage = 10;
object fieldValue = cashTransaction["NetAmountCalculator"].Value;
var func = (Func<decimal, decimal, decimal)fieldValue;
decimal actualResult = func(discountedAmount , discountPecentage);
...