C# 用于安排单元测试的序列化对象图
我有一个应用程序,其中问题域由高度相关的域对象表示。我已经将域拆分为几个聚合根对象,这有助于对模型施加顺序,但是为单元测试安排先决条件非常困难,因为创建这些聚合根的实例需要创建大量被引用的支持对象 我希望编写可重复的、独立的单元测试,以在不需要外部依赖项的情况下(理想情况下,不需要编写大量代码)运行应用程序 我想这是我的选择。有什么偏好或其他建议吗C# 用于安排单元测试的序列化对象图,c#,unit-testing,testing,serialization,tdd,C#,Unit Testing,Testing,Serialization,Tdd,我有一个应用程序,其中问题域由高度相关的域对象表示。我已经将域拆分为几个聚合根对象,这有助于对模型施加顺序,但是为单元测试安排先决条件非常困难,因为创建这些聚合根的实例需要创建大量被引用的支持对象 我希望编写可重复的、独立的单元测试,以在不需要外部依赖项的情况下(理想情况下,不需要编写大量代码)运行应用程序 我想这是我的选择。有什么偏好或其他建议吗 编写构建脚本,设置项目数据库并将已知数据插入其中,然后根据这些脚本执行单元测试。这是我最不喜欢的选项,因为它引入了外部依赖关系(因此不是真正的单元测
- 写剧本。您很可能会手工编写SQL,这需要很多规程,尤其是在模型复杂的情况下。打字错误是痛苦的,很难调试/检测问题,您也需要考虑IDE/工具
- 当您的模型发生更改时,您将修复这些SQL脚本,这会引发相同的问题—打字错误、难以发现错误等等,以及缺少IDE支持
对于这样的问题,没有快速而肮脏的解决办法。复杂域意味着在某个点上必须做一些额外的工作。基于序列化的解决方案(1、3、4),即使有些现在看起来很简单,也只会将所说的额外工作推迟到引入更改时。几乎在所有情况下,我都会选择更灵活的和随时准备更改的(只有第二种解决方案可以提供,如果操作得当)。您所说的问题是,数据分散在域对象图中: 如果你想计算发票的价格,你需要物品价格、税务信息、特定于客户的结算、特定于交货期的运输成本等等 处理这种复杂性的一种策略是将逻辑从实际计算中分离出来,以获得这些细节值 该计算是一种内部方法,具有许多参数,对其他域对象的依赖性最小。这很容易测试,因为它不再依赖于对象图
另一种策略是将复杂的计算从域移动到依赖于其他服务接口的独立服务层。为了测试这些服务接口,可以用mock代替 指给我看那些图书馆我想你