0

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

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

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

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

4

3 回答 3

0

是的,反思将是要走的路。

最好对一些模拟对象执行单元测试,这样你就有一个已知的值来测试。

于 2009-07-08T07:33:39.003 回答
0

反射是一种方法,但它有它的警告,如果你将一个属性设置为它的默认值,你将不会接受它被设置的事实。

您可以使用真正的代理进行拦截,然后监听所有属性更改。请参阅此处的代码以获取您可以使用的基本拦截器。注意拦截器意味着你需要你的对象是 MarshalByRefObject 这可能不是你想要的。所以另一个选择是告诉你的工厂在它返回测试场景之前包装对象。ninject 或许多其他控制库的反转将允许您这样做。

于 2009-07-08T07:34:27.147 回答
0

也许你可以改变你的 BO/DTO 来实现INotifyPropertyChanged接口。这样,您可以设置一些侦听器来告诉您的单元/集成测试更改了哪些属性。

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

于 2009-07-08T09:43:35.950 回答