设计有两个类似的代码重复和测试算法?

时间:2013-02-08 19:11:55

标签: c# unit-testing architecture moq

我正在开发一个程序来操纵成本历史并最终进行预测。

我遇到的问题是我想计算修改器,这些修改器将用于成本历史记录以消除季节差异。我需要两种不同的方法来计算它们,并且这两种方法几乎相同,除了它将是乘法而不是加法的地方。

一个例子是:

    private void CalculAndSumEveryPeriodeModifier()
    {
        List<double> averages = MovingAverage.Averages;

        for (int i = 0; i < averages.Count; ++i)
        {
            averages[i] = costsList[i + NbPeriode / 2] / averages[i] // Division changed to substraction
            modifiers[((i + NbPeriode / 2) % NbPeriode)] += averages[i];
        }
    }

我尝试了一个抽象类,它有一个带有两个双精度的私有抽象方法。然后,具体类可以实现此方法,以在算法中的某些点划分或减去双精度。

这种方法的问题是我不知道如何对它进行单元测试。如果是的话,我可以用moq框架测试抽象类吗?否则我需要测试两个将重复代码的具体类,因为测试将是相同的。

有没有办法对我的尝试进行单元测试,还是有更好的方法?

凯文

1 个答案:

答案 0 :(得分:0)

为什么不将两个单元测试方法的公共代码分解为共享方法?

private int[] input = new int[] { 2, 8, 6, 1, 5, 1, 7, 5, 2, 4 };

[TestMethod]
public void TestVariantA() 
{
    var obj = new ConcreteA();
    DoTest(obj, input, new int[] { -2.8, 3, 1.4, -3.2, 1 });
}


[TestMethod]
public void TestVariantB() 
{
    var obj = new ConcreteB();
    DoTest(obj, input, new int[] { 0.2632, 1.7500, 1.3397, 0.2381, 1.2500 });
}

private void DoTest(AbstractType obj, int input, int expected)
{
    ...
}