每日消息!领域驱动设计之单元测试最佳实践(二)

2023-03-12 08:53:35    来源:哔哩哔哩


【资料图】

介绍完了DDD案例,我们终于可以进入主题了,本方案的测试代码基于Xunit编写,断言组件采用了FluentAssertions,类似的组件还有Shouldly。另外本案例使用了Code Contracts for .NET,如果不安装此插件,可能有个别测试不能正确Pass。

为了实现目标中的第二点:"尽量不Mock,包括数据库读取部分”,我尝试过3种方案:

1、测试代码连接真实数据库,只需要将测试数据库配置到测试项目中的web.config中,即可达到这一目标。但是该方案毕竟存在很多缺点,如:需要将测试库和正式库的更改保持同步,单元测试不利于集成在CI中,不利于团队协作等。

2、使用SQL Lite,但是由于SQL lite本身不支持一些Linq表达式如:Skip,另外还有一些功能也无法跟Sql server保持一致,最终放弃该方案。

3、使用测试组件Effort,可以很好的配合Entity framework使用,由于Effort内部使用了关系型内存数据库nmemory,所以非常适合运行单元测试。

当然我还是非常期待微软能够编写基于EF的单元测试组件。

我在《我眼中的领域驱动设计》一文中提到:不要使用数据库独有的技术,如存储过程和触发器等。一方面这些逻辑都应该是Domain逻辑,另一方面一旦使用了这些技术也就意味着我们无法为这些逻辑编写测试。

一、使用Effort

为了能够在Castle中使用基于Effort的DbContext,需要在Castle中注册Effort:

1

关键词:

上一篇:

下一篇:

X 关闭

X 关闭