从未调用单元测试设置

时间:2013-07-22 06:16:50

标签: linq unit-testing moq verify

我正在尝试编写一个单元测试来测试一个方法,该方法基本上接受一些数据组,然后运行一个方法。出于某种原因,我的设置永远不会被调用。我已经调试了,我检查了传入和传出的类型以及数据,并且在分组后它们完全相同。任何想法为什么这不起作用?

这是我的测试:

MyArray[] grouped = myArray
                    .SelectMany(x => x.AccountValues)
                    .GroupBy(x => x.TimeStamp)
                    .Select(g2 => 
                        new AccountValue { 
                                Amount = g2.Sum(x => x.Amount), 
                                TimeStamp = g2.Key })
                    .ToArray();

helper
   .Setup(s => s.Compute(grouped, grouped.Count())
   .Returns(someValue);

var result = _engine.Get(accountNumbers, startDate, endDate, code);

helper.Verify(v => v.Compute(grouped, grouped.Count()), Times.Exactly(1));

我正在测试的实际方法如下:

public decimal? Get(long[] accountNumbers, 
                          DateTime startDate, 
                          DateTime endDate, 
                          long code)
{
        var accountNumbersInt = Array.ConvertAll(accountNumbers, i => (int)i);

        var myArray = TransactionManager
                             .Get(accountNumbersInt, startDate, endDate, code);

        var accountValues = GroupData(myArray);
        var result= Helper.Compute(accountValues, accountValues.Count());
        return result;
}

internal myArray[] GroupData(Account[] myArray)
{
    var grouped = myArray
                       .SelectMany(x => x.AccountValues)
                       .GroupBy(x => x.TimeStamp)
                       .Select(g2 => 
                          new AccountValue { 
                                   Amount = g2.Sum(x => x.Amount), 
                                   TimeStamp = g2.Key })
                       .ToArray();
    return grouped;
}

编辑:帮助器在测试设置中设置如下

[SetUp]
public void Setup()
{
    _engine = new CalcEngine();
    helper = new Mock<IHelper>();
    _engine.Helper = helper.Object;
}

1 个答案:

答案 0 :(得分:0)

此部分不会调用您的方法:

helper
   .Setup(s => s.Compute(grouped, grouped.Count())
   .Returns(someValue);

您的测试编写方式,我认为您正在测试_engine.Get()方法。 我们的想法是你要创建一个模拟器,将它传递给你正在测试的方法(不同的方法)调用你正在测试的方法,然后观察其他结果(副作用)。

我在您的Get()方法中看到您正在执行以下操作:

var result= Helper.Compute(accountValues, accountValues.Count());

假设Helper与您尝试验证您需要从单元测试中传递它相同,所以类似于:

helper
   .Setup(s => s.Compute(grouped, grouped.Count())
   .Returns(someValue);

_engine.Helper = helper.Object;

// your verifications here ...