如何测试对象中的每个属性是否已设置/赋值?

时间:2009-07-08 07:30:07

标签: c# .net integration-testing

我正在研究一个使用存储过程,业务对象和DTO的遗留系统。业务对象和DTO:通常具有相同的属性。在返回DTO的服务层中调用方法时,会发生许多转换。存储过程 - >数据集 - >业务对象 - > DTO。如果添加了新属性,有时会发生开发人员忘记添加将其从一个图层/对象移动到另一个图层/对象的代码。

在系统的某些部分,我通过使用AutoMapper解决了这个问题,AutoMapper将自动投影具有相同名称的属性。

我的问题是其他部分。我可以以某种方式编写单元测试来检查对象中的每个属性是否已设置/给定值?这样我就可以编写一个调用我们的服务层的集成测试,并且所有的转换都必须成功通过测试。

我想解决方案会涉及反思。

3 个答案:

答案 0 :(得分:0)

是的,反思将是最佳选择。

最好对某些模拟对象执行单元测试,因此您有一个已知的值来测试。

答案 1 :(得分:0)

反射是一种方式,但它有一些注意事项,如果你将一个属性设置为默认值,你就不会了解它所设置的事实。

您可以使用真实代理拦截,然后侦听所有属性更改。 See the code here您可以使用的基础拦截器。注意拦截器意味着你需要你的对象是MarshalByRefObject,这可能不是你想要的。所以另一个选择是告诉你的工厂在测试场景中返回对象之前将其包装起来。控件库中的某些内容或许多其他反转将允许您执行此操作。

答案 2 :(得分:0)

也许你可以改变你的BO / DTO来实现INotifyPropertyChanged接口。通过这种方式,您可以设置一些监听器来告诉您的单元/集成测试哪些属性已更改。

在侦听器中,您可以保存所有已更改属性的列表,并且可以通过反射检入列表中没有的其他属性。