如何正确测试 EntityFramework、存储库模式和复杂对象的业务逻辑?
How to properly test EntityFramework, Repository pattern and Business logic w/ complex objects?
我有一个设计有点复杂的数据库,因此问题也很复杂。
我通过 Entity Framework 与这个数据库通信。我的代码库如下所示:
- 数据层:Entity Framework、DbContext、数据模型。
- 存储库层:模型的基本 CRUD 操作提供程序。
- 逻辑层:业务逻辑。
- Web API 层:与服务通信的控制器。
- 测试层:做业务逻辑单元测试。
我正在编写单元测试,但我不知道如何正确编写它们,或者我的业务逻辑层是否很糟糕...在大学里,他们认为我应该这样做,但我想我可能误解了这种模式背后的原理...
在我的业务逻辑方法中,我将域对象作为参数传递,然后使用 LINQ 'query' 数据库来查找所需的结果。每个方法都使用 'queries' 作为逻辑。所以它在很大程度上取决于查询。
例如,我需要确定 2 个用户是否相互匹配(就像在 Tinder 中一样)
public bool AreTheyMatched(Profile requestor, Profile requested)
{
var areTheyMatched = ChatRepository.GetAll().Where(x =>
x.Profiles.Contains(requestor) &&
x.Profiles.Contains(requested) &&
x.SYS_ChatType.Type.ToLower() == "match" &&
x.Profiles.Count() == 2).Count() == 1;
return areTheyMatched;
这里的最佳做法是什么?
- 我觉得模拟查询在这里没用...
- 也觉得查询不应该是逻辑的一部分...
- 模拟 GetAll() 方法没问题,但由于 Entity framework 生成的 POCO 类 是自引用的(聊天有配置文件列表,配置文件有聊天实体,等等...)设置模拟会很困难,但可能...
- 我应该从参数范围内收集数据吗?
- 我如何测试查询以查看它们是否完全正确?
- 我如何测试业务逻辑?
我在插入数据库时进行了验证简单对象的单元测试。这对我来说很简单。但是这个题目的复杂度似乎超出了我目前的理解范围。
创建一个包含适合您当前测试用例的嵌套配置文件的聊天对象列表。例如,一个列表实际上包含两个配置文件的匹配项。然后将存储库模拟到 return 此列表并断言已找到匹配项。对于另一个测试用例,设置聊天列表没有匹配项,并断言未找到匹配项。
我有一个设计有点复杂的数据库,因此问题也很复杂。
我通过 Entity Framework 与这个数据库通信。我的代码库如下所示:
- 数据层:Entity Framework、DbContext、数据模型。
- 存储库层:模型的基本 CRUD 操作提供程序。
- 逻辑层:业务逻辑。
- Web API 层:与服务通信的控制器。
- 测试层:做业务逻辑单元测试。
我正在编写单元测试,但我不知道如何正确编写它们,或者我的业务逻辑层是否很糟糕...在大学里,他们认为我应该这样做,但我想我可能误解了这种模式背后的原理...
在我的业务逻辑方法中,我将域对象作为参数传递,然后使用 LINQ 'query' 数据库来查找所需的结果。每个方法都使用 'queries' 作为逻辑。所以它在很大程度上取决于查询。 例如,我需要确定 2 个用户是否相互匹配(就像在 Tinder 中一样)
public bool AreTheyMatched(Profile requestor, Profile requested)
{
var areTheyMatched = ChatRepository.GetAll().Where(x =>
x.Profiles.Contains(requestor) &&
x.Profiles.Contains(requested) &&
x.SYS_ChatType.Type.ToLower() == "match" &&
x.Profiles.Count() == 2).Count() == 1;
return areTheyMatched;
这里的最佳做法是什么?
- 我觉得模拟查询在这里没用...
- 也觉得查询不应该是逻辑的一部分...
- 模拟 GetAll() 方法没问题,但由于 Entity framework 生成的 POCO 类 是自引用的(聊天有配置文件列表,配置文件有聊天实体,等等...)设置模拟会很困难,但可能...
- 我应该从参数范围内收集数据吗?
- 我如何测试查询以查看它们是否完全正确?
- 我如何测试业务逻辑?
我在插入数据库时进行了验证简单对象的单元测试。这对我来说很简单。但是这个题目的复杂度似乎超出了我目前的理解范围。
创建一个包含适合您当前测试用例的嵌套配置文件的聊天对象列表。例如,一个列表实际上包含两个配置文件的匹配项。然后将存储库模拟到 return 此列表并断言已找到匹配项。对于另一个测试用例,设置聊天列表没有匹配项,并断言未找到匹配项。