请考虑以下事项:
new SUT(null, null, new List<IObjectBeingMocked>() { mockObjectOne.Object, mockObjectTwo.Object })
我的SUT(被测系统)需要一个对象列表作为第三个参数。这些都需要嘲笑,因为我已经对这些做了一些期待。
如何清除它以便我无需在列表中的每个项目上调用.Object
?通常只有两个项目,但这可能会增长,在我看来,这使得测试更难阅读。
将这个模拟对象列表轻松/好地转换为实际对象的最佳方法是什么?
答案 0 :(得分:4)
也许您可以使用扩展方法来管理列表创建和Object属性的调用。
var list = new List<Mock<Foo>>() { ... };
new SUT( null, null, list.Select( o => o.Object ).ToList() );
答案 1 :(得分:2)
处理此问题的一种好方法是创建一个GetSUT()方法,该方法仅在一个位置创建一次。然后,当您的SUT创建发生变化时,您只需在一个地方进行更改。
答案 2 :(得分:1)
为清晰起见,您可以introduce explaining variables(当地人):
IObjectBeingMocked objectOne = mockObjectOne.Object;
IObjectBeingMocked objectTwo = mockObjectTwo.Object;
new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo });
编辑:也许比我的“objectOne”,“objectTwo”选择更好的名字。 ;)
答案 3 :(得分:1)
您可以使用Mocks.Query()方法,该方法将返回所有模拟SUT实例的集合 此功能存在于moq的beta版本中。查看详情here: