请考虑以下事项:

new SUT(null, null, new List<IObjectBeingMocked>() { mockObjectOne.Object, mockObjectTwo.Object })

我的SUT(被测系统)需要一个对象列表作为第三个参数。这些都需要嘲笑,因为我已经对这些做了一些预期。

如何清除它以便我可以不再需要在列表中的每个项目上调用 .Object ?通常只有两个项目,但这可能会增长,在我看来,这使得测试更难阅读。

将这个模拟对象列表轻松/好地转换为实际对象的最佳方法是什么?

有帮助吗?

解决方案

您可以使用Mocks.Query()方法,该方法将返回所有模拟SUT实例的集合 此功能存在于moq的beta版本中。详情请见此处

其他提示

也许您可以使用扩展方法来管理列表创建和Object属性的调用。

var list = new List<Mock<Foo>>() { ... };
new SUT( null, null, list.Select( o => o.Object ).ToList() );

处理此问题的一种好方法是创建一个GetSUT()方法,该方法仅在一个位置创建一次。然后,当您的SUT创建发生变化时,您只需在一个地方进行更改。

为清晰起见,您可以介绍解释变量(当地人):

IObjectBeingMocked objectOne = mockObjectOne.Object;
IObjectBeingMocked objectTwo = mockObjectTwo.Object;

new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo });
编辑:可能选择的名称比我的“objectOne”,“objectTwo”更好。 ;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top