我想使用MB单位Func<>
测试以下类私有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 help以及来自google code
的另一个很好的帮助答案 0 :(得分:3)
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);