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