代码之家  ›  专栏  ›  技术社区  ›  Raj Rao

Moq-访问模拟对象的属性

moq
  •  3
  • Raj Rao  · 技术社区  · 14 年前

    我有一个带有属性和方法的接口。 该方法使用属性的值执行某些操作。 如何设置模拟以访问属性的值?

    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?

    1 回复  |  直到 14 年前
        1
  •  7
  •   Lunivore    14 年前

    你用 SetupGet 对于属性。因为您模拟的是接口,所以不会有任何底层实现,而且您还必须设置方法。

    Mock<myInterface> mock = new Mock<myInterface>(){CallBase = true};
    mock.SetupGet(m => m.Id).Returns(1);
    mock.Setup(m => m.ReturnsIdAsString()).Returns("1");
    

    如果您打算更改 Id 财产。

    mock.Setup(m => m.ReturnsIdAsString()).Returns(() => mock.Object.Id.ToString());
    

    m.Id = 42 它不会改变 Get Set .

    mock.VerifySet(m => m.Id = 42);