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

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

我正在对依赖于其他存储库接口(interface)和服务接口(interface)的业务服务进行单元测试。这些依赖项返回包含对其他复杂对象的循环引用的复杂对象。我正在使用 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;}
}

最佳答案

我个人不喜欢这个想法。通过在代码中创建对象,您可以获得 2 个非常巨大的好处。

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

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

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

关于c# - 设置包含对其他复杂对象的循环引用的复杂对象以进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809201/

相关文章:

c# - DataGridView 上的格式化数字不是我需要的

c# - 避免使用 Entity Framework 的 Oracle 模式名称

android - 如何单元测试改造调用?

c# - 手动将现有对象分配给 Entity Framework 导航属性

entity-framework - Entity Framework 存储过程与生成的SQL

unit-testing - flutter :单元测试

python - 修补作为另一个类的属性的类实例属性

c# - 使用 InvokeMember 检索静态属性值

c# - 如何在一个界面中使用不同的模板参数两次使用相同的界面?

c# - FormsAuthenticationTicket 不能在服务器端失效。引起 cookie 回复攻击