1

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

这是在我的测试中:

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;
}
4

1 回答 1

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 ...
于 2013-07-22T11:48:27.037 回答