【问题标题】:Rhino Mocks: Mocking a Read-Only Property declared on InterfaceRhino Mocks:模拟在接口上声明的只读属性
【发布时间】:2018-02-01 15:41:28
【问题描述】:

我在 CSharp 项目中有以下接口和类:

namespace FakeLib
{
  public class Child : IChild
  {
    public DbConnection Connection { get; }
  }

  public interface IChild
  {
    DbConnection Connection { get; }
  }
  public class Parent
  {
    public IChild item { get; set; }
    public string Run()
    {
      return item.Connection.Database;
    }
  }
}

所以我创建了以下 UnitTest 方法:

[TestMethod]
public void TestMethod1()
{
  var repository = new MockRepository();
  var stub = repository.Stub<FakeLib.IChild>();
  stub.Stub(x => x.Connection).Return(new SqlConnection());
  var pai = new FakeLib.Parent() { item = stub };
  var conn = stub.Connection;
  Assert.IsNotNull(conn);
}

据我所知,它应该可以正常工作而不会引发任何异常。但事实是,“Connection”属性永远不会返回应由 Rhino Mocks 存根的已声明 SqlConnection。有人知道我错过了什么吗?

【问题讨论】:

  • 测试失败的原因是什么?
  • 对不起,如果我的问题不够清楚,感谢您的帮助。问题是来自属性“Connection”的 Get 方法没有被 Rhino Mocks 存根。因此,它首先引发 NullReferenceException。并且在调试测试并尝试通过观察列表评估属性时,它会引发一个异常,告诉我 get_Connection 没有实现。但是我检查了 Rhino Mocks 文档,他们告诉我们这样做: stub.Stub(x => x.Connection).Return(new SqlConnection());再次感谢您!

标签: c# rhino-mocks


【解决方案1】:

在尝试了很多不同的方法后,我终于找到了这个奇怪问题的根源:

替换此代码:

var repository = new MockRepository();
var stub = repository.Stub<FakeLib.IChild>();

这个

var stub = Rhino.Mocks.MockRepository.GenerateStub<FakeLib.IChild>();

解决了这个问题。这很奇怪,因为存根工作正常,除了只读属性,就是这种情况。似乎 Rhino 对不同的目标使用不同但模棱两可的语法。 谢谢大家的帮助

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多