如何保存值以便以后返回?

时间:2013-12-13 09:12:28

标签: c# return moq

我的界面ILogger具有LocalTime属性,可以使用AddToTime添加时间。为了适当地模拟它,我尝试了以下内容:

int ltime = 0;
var mlog = new Mock<ILogger>();
mlog.Setup(l => l.AddToTime(It.IsAny<int>())).Callback((int s) => {ltime +=s;});
mlog.Setup(l => l.LocalTime).Returns(ltime);

虽然它编译,但我不起作用:可能是因为Returns在开头评估表达式ltime,因此总是返回0。任何建议如何实现缩进行为?

编辑:我需要这个来测试它,看起来像这样:

while (log.LocalTime < 1000)
        {
            log.AddToTime(500);
             ....
         }

由于我将时间用于记录目的,因此不能简单地用带有局部变量的循环替换它。如果AddToTime什么都不做,则无法正确测试循环。

2 个答案:

答案 0 :(得分:4)

这是一个测试,我建议你避免测试中的任何逻辑。只有你应该有一些逻辑的地方是SUT你正在测试。否则,模拟记录器的实现会潜入其他类的测试中。只需设置您期望的值:

int ltime = 0;
int timeToAdd = 2;
var mlog = new Mock<ILogger>();
mlog.Setup(l => l.AddToTime(timeToAdd));
mlog.Setup(l => l.LocalTime).Returns(ltime + timeToAdd);

我甚至会尝试避免上次返回设置计算并将其替换为常量预期值。但我需要更多地了解您正在测试的逻辑。

答案 1 :(得分:0)

您可以使用Returns方法代替Callback 这里的例子: Settings variable values in a Moq Callback() call