【问题标题】:Rhino Mock: FailedRecorded expectation: IDateHelper.get_Now();Rhino Mock:FailedRecorded 期望:IDateHelper.get_Now();
【发布时间】: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 =&gt; d.Now).Return(now);?

标签: c# unit-testing mocking rhino-mocks


【解决方案1】:

希望这会对您有所帮助。我必须同意@ledbutter,.Expect 表示法我认为更容易理解。

using System;
using NUnit.Framework;
using Rhino.Mocks;

namespace FluentConfigHelper.Test
{
    [TestFixture]
    public class StackOverflowTest
    {
        private IDateHelper _dateHelper;

        public interface IDateHelper
        {
            DateTime Now { get; }
        }

        public class DateHelper : IDateHelper
        {
            public DateTime Now { get; set; }
        }

        public IDateHelper DateHelperLocal
        {
            get { return _dateHelper ?? (_dateHelper = new DateHelper()); }
            set { _dateHelper = value; }
        }

        public DateTime MethodUnderTest()
        {
            return DateHelperLocal.Now.AddMonths(1);
        }

        [Test]
        public void DateTimeTest()
        {
            IDateHelper dateHelper = MockRepository.GenerateStrictMock<IDateHelper>();
            DateTime now = new DateTime(2011, 12, 16);
            dateHelper.Expect(x => x.Now).Return(now);
            DateHelperLocal = dateHelper;
            var result = MethodUnderTest();
            Assert.AreEqual(new DateTime(2012, 1, 16), result);
            dateHelper.VerifyAllExpectations();
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多