【问题标题】:How to change Moq Object value when an event is raised引发事件时如何更改 Moq 对象值
【发布时间】:2017-10-07 18:04:35
【问题描述】:

我有一个模拟对象ttLoc 用于ILocation。我已将其状态值设置为LocationState.Available。 我有一个名为UpdateLocationState 的方法,它将更新我正在为其编写测试用例的状态。 当状态更新时,会引发一个事件。

当事件发生时,我想将ttLoc.Object.State 更新为LocationState.Reserved。 我怎样才能做到这一点?

var ttLoc = new Mock<ILocation>();
ttLoc.Setup(loc => loc.LocationId).Returns("TestLocation");
ttLoc.Setup(state => state.State).Returns(LocationState.Available);

this.ManagerMock.Setup(d => d.SetLocationState(It.IsAny<ILocation>(), It.IsAny<LocationState>())).Raises(f => f.LocationStateChangedEvent += null, new EventArgs<LocationState>(LocationState.Available));

var result = LocationService.UpdateLocationState(ttLoc.Object, LocationState.Reserved);

【问题讨论】:

  • 提供一个minimal reproducible example 可以用来正确理解问题。显示被测方法、它如何与模拟交互以及所需的行为。目前尚不完全清楚代码试图做什么。
  • @Nkosi 我的问题与stackoverflow.com/questions/36761339/… 几乎相似这里我的问题是我无法为 LocationService 创建模拟来设置数据
  • @reddy 理解,但您必须显示ILocation 的定义以及LocationServiceUpdateLocationState 的部分,以便我们向您展示您需要做什么。现在只能猜测它们是如何交互的。
  • @Nkosi 我的问题与stackoverflow.com/questions/36761339/… 相同,唯一的区别是 Sample.Number 是只读属性,它只有 Get 属性,所以当我赋值时它说只读属性。你能帮忙吗我如何在这里模拟只读属性?

标签: c# moq


【解决方案1】:

我认为您可以使用 SetupAllProperties() 函数来做到这一点。看: How to assign values to properties in moq?

然后您可以将新状态分配给 moq 对象属性。

【讨论】:

    猜你喜欢
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多