2009-09-15 63 views
3

考虑以下几点:名单 - 最佳实践/简化

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

我的SUT(测试系统)的需求对象作为第三个参数的清单。这些都需要嘲笑,因为我已经对这些做了一些期望。

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

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

回答

1

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

+0

这是真的,因此我接受它,但我的版本的Moq不支持它,因为我没有使用测试版。它的东西,我会看看虽然。 – Finglas 2009-09-16 20:04:36

4

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

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

你可以introduce explaining variables(当地人)为清楚:

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

new SUT(null, null, new List<IObjectBeingMocked>() { objectOne, objectTwo }); 

编辑:也许比我的 “objectOne”, “objectTwo” 更好选择的名称。 ;)

2

处理此问题的好方法是创建一个GetSUT()方法,该方法只在一个地方创建一次。然后,当你的SUT创建改变时,你只需要在一个地方改变它。