例如: 我有一个属性和方法的接口。 该方法使用属性的值来执行某些操作。 如何设置模拟以访问属性的值?
interface myInterface
{
Id{get;set;}
string ReturnIdAsString();
}
Mock<myInterface> mock = new Mock<myInterface>();
mock.Setup(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString).Returns(**would like to return m.Id here**);
mock.Object.ReturnsIdAsString(); //should return the value in m.Id
如何设置ReturnsIdAsString以访问属性Id?
答案 0 :(得分:7)
您使用SetupGet
作为属性。由于您正在模拟一个接口,因此不会有任何底层实现,您也必须设置该方法。
Mock<myInterface> mock = new Mock<myInterface>(){CallBase = true};
mock.SetupGet(m => m.Id).Returns(1);
mock.Setup(m => m.ReturnsIdAsString()).Returns("1");
如果您打算更改Id
属性的返回值,也可以让方法在返回时使用lambda。
mock.Setup(m => m.ReturnsIdAsString()).Returns(() => mock.Object.Id.ToString());
请注意,即使您的班级调用m.Id = 42
,也不会更改该属性的Get
,但您可以验证Set
。
mock.VerifySet(m => m.Id = 42);