C# Rhino Mocks:模拟接口上声明的只读属性
我在CSharp项目中有以下接口和类: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;
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());再次感谢你!