Модульный тест для частного метода делегата Func с использованием зеркала MBUnit
Я хотел бы проверить следующий класс Private Func<>
метод делегата с использованием единиц MB 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);
}
Я сослался на справку MB Uint, а также еще одну полезную справку из кода Google
1 ответ
Решение
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);