C# Rhino Mocks:模拟接口上声明的只读属性

C# Rhino Mocks:模拟接口上声明的只读属性,c#,rhino-mocks,C#,Rhino Mocks,我在CSharp项目中有以下接口和类: namespace FakeLib { public class Child : IChild { public DbConnection Connection { get; } } public interface IChild { DbConnection Connection { get; } } public class Parent { public IChild item { get;

我在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);
}
[TestMethod]
公共void TestMethod1()
{
var repository=new MockRepository();
var stub=repository.stub();
stub.stub(x=>x.Connection).Return(newsqlconnection());
var pai=new FakeLib.Parent(){item=stub};
var conn=存根连接;
Assert.IsNotNull(conn);
}

据我所知,它应该不会引起任何例外。但事实是,“Connection”属性永远不会返回应该由Rhino Mock存根的已声明的SqlConnection。有人知道我错过了什么吗?

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

替换此代码:

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

var stub = Rhino.Mocks.MockRepository.GenerateStub<FakeLib.IChild>();
var stub=Rhino.Mocks.MockRepository.GenerateStub();
解决了这个问题。这很奇怪,因为存根工作正常,除了只读属性,就是这样。Rhino似乎使用不同但模棱两可的sintax来实现不同的目标。
谢谢大家的帮助

考试失败的原因是什么?如果我的问题不够清楚,请原谅,谢谢大家的帮助。问题在于,属性“Connection”的Get方法没有被Rhino mock存根。因此,它首先引发一个NullReferenceException。当调试测试并试图通过监视列表评估属性时,它会引发一个异常,告诉我get_连接没有实现。但是我检查了Rhino Mocks文档,他们告诉我们要做的就是:stub.stub(x=>x.Connection).Return(new-SqlConnection());再次感谢你!