【发布时间】:2014-01-10 13:42:45
【问题描述】:
我正在调试这个不起眼的 Rhino Mocks 错误:
Rhino.Mocks.Exceptions.ExpectationViolationException: ... 预期 #0, 实际 #1。
发现在录音前加上RhinoMocks.Logger = new TextWriterExpectationLogger(Console.Out);可以给我更多信息:
FailedRecorded 期望:IDateHelper.get_Now();
但我不知道如何解决这个问题,甚至不知道出了什么问题。
代码如下:
IDateHelper dateHelper = mock.StrictMock<IDateHelper>();
DateTime now = new DateTime(2011, 12, 16);
Expect.Call(dateHelper.Now).Return(now).Repeat.Any();
...
public interface IDateHelper
{
DateTime Now { get; }
}
编辑:添加了 ledbutter 要求的代码。我遗漏了 dateHelper 正在传递给另一个对象,该对象正在传递给另一个对象......我只是不想让你们不知所措:) 我正在使用的代码库庞大而复杂,我没有别写了;p
public IDateHelper DateHelper
{
get { return dateHelper ?? (dateHelper = new DateHelper()); }
set { dateHelper = value; }
}
...
string date = Helper.ConvertDateToYearMonth(DateHelper.Now.AddMonths(1));
当日期变量被传递给另一个函数时,ExpectationViolationException 在这之后的几行发生。
【问题讨论】:
-
所以你正在测试的方法应该是调用
IDateHelper.Now,你能显示那个代码吗? -
用代码更新了问题。感谢您查看我的问题 :)
-
谢谢,但是你能在你的单元测试中显示所有相关的行吗?
-
你为什么不用这个语法:
dateHelper.Expect(d => d.Now).Return(now);?
标签: c# unit-testing mocking rhino-mocks