Rhino Mocks:模拟在Interface上声明的只读属性

时间:2017-08-23 22:11:24

标签: 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; 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);
}

据我所知,它应该可以在不引发任何异常的情况下工作。但事实是&#34;连接&#34;属性永远不会返回应该由Rhino Mocks存根的声明的SqlConnection。有谁知道我错过了什么?

1 个答案:

答案 0 :(得分:1)

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

替换此代码:

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

这一个

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

解决了这个问题。它很奇怪,因为存根工作正常,除了只读属性,就是这种情况。似乎Rhino使用不同但含糊不清的sintax来实现不同的目标。 谢谢大家的帮助