2015-11-19 73 views
2

我正在测试依赖于其他存储库接口和服务接口的业务服务。这些依赖项返回包含对其他复杂对象的循环引用的复杂对象。我正在使用MOQ来模拟这些依赖关系,并设置它们的例程来返回复杂的对象。然后我验证被测业务服务是否返回了正确的结果。为单元测试设置包含对其他复杂对象的循环引用的复杂对象

由于这些复杂对象的复杂性,创建一个代表这些复杂对象的JSON文件并将其反序列化为模拟对象,我设置好了吗?你怎么看?复杂的对象,需要充分填充测试的

例子:

public class Foo{ 
    property int Id {get; set;} 
    property virtual ICollection<Bar> Bars {get; set;} 
} 

public class Bar{ 
    property int Id {get; set;} 
    property int BarId {get; set;} 
    property virtual Foo Foo {get; set;} 
} 

回答

1

我个人没有这个想法的粉丝。通过在代码中创建对象可以获得2个非常大的好处。

  1. 如果更改对象结构并错过在测试中做出相同更改,则会出现编译时错误。
  2. 工具自动对对象定义进行级联更改的可能性流向测试中的代码(例如VS,Resharper)。

也许还有其他工具可以帮助缓解这些问题,但是为什么在不需要的时候引入更多的复杂性。

事实上,除非您的应用程序实际上是以相同的方式创建对象,否则在创建那些特定于您使用的解串器的对象时可能会有一些细微的差异,这有助于隐藏缺陷。

+0

这是一个很好的观点,如果我改变了类的属性,那么json将不得不相应更新。 – Robbie

+0

我在代码中设置模拟数据时遇到的困难是填充循环引用。例如,Foo包含许多条和一个条包含foo。有什么建议吗? – Robbie

+0

他们是如何正常构建的?他们是懒惰加载还是有这些循环依赖的可设置属性?如果您包含更具体的示例,可能会有帮助,因此我们一定会在同一页面上。 – Sacrilege