使用MBUnit镜像的私有Func委托方法的单元测试

时间:2011-08-19 09:48:32

标签: c# .net mbunit gallio

我想使用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

的另一个很好的帮助

1 个答案:

答案 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);