设置包含对其他复杂对象的循环引用的复杂对象以进行单元测试

时间:2015-11-19 16:21:48

标签: c# entity-framework unit-testing moq xunit.net

我正在测试依赖于其他存储库接口和服务接口的业务服务。这些依赖关系返回包含对其他复杂对象的循环引用的复杂对象。我使用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 个答案:

答案 0 :(得分:1)

我个人不是这个主意的粉丝。通过在代码中创建对象,您可以获得2个非常大的好处。

  1. 如果更改对象结构并且未在测试中进行相同的更改,则会出现编译时错误。
  2. 工具自动对对象定义进行级联更改的可能性流向测试中的代码(例如VS,Resharper)。
  3. 可能有其他工具可以帮助缓解这些问题,但为什么在不需要时会引入更多复杂性。

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