我应该测试通用存储库中的每个通用类型吗?

Should I test every Generic type in a generic Repository?

我目前正在对我在洋葱架构中实现的通用存储库进行测试。我的数据访问是使用 Entity Framework Code First 进行的。

因为我有一个通用存储库,所以我几乎可以使用任何实体 (POCO) 作为存储库的通用类型。为了说明这一点,repo 看起来像这样(没有接口或实现的基本 repo):

public class Repository<T> where T : class
{
   //Code here
}

现在,我想测试它,所以我的问题来了:我必须在测试中使用每个实体吗?假设我有表格:文档、类别、配置文件、组等等...

我是否必须以这种方式测试所有这些 POCO:

Repository<Document> repoDoc = new Repository<Document>();
Repository<Category> repoCat = new Repository<Category>();
//And so on for each and every table, and then apply tests to each

请注意,我有数百张桌子,所以做这种事情的想法让我很难过 :D

感谢您的帮助!

泛型的思想是抽象出独立于确切数据类型的操作的核心代码(或扩展一些具体的东西)。测试每个 可能的实现与根本没有任何泛型并测试所有实现

完全相同

那么,这里要测试什么?与往常一样:关键代码。举一些你的代码将要处理的代表性例子,并为这些案例编写一些测试

为了进一步解释这一点:假设你有这样的东西:

function add(int number1, number 2) {
    return number1 + number2;
}

你会测试什么?您会测试 对可能的整数吗?那是没有意义的!再次,选择一些有代表性的案例进行测试

测试时不仅要选择有代表性的案例,还要选择edge个案例。这是您知道将测试某些条件的情况。例如:

function something(int number) {
    for(int i = 0; i < number; i++) {
        ...
    }
}

那你会测试什么?好吧,一些有代表性的值是 -5、10...但是一个重要的值是 0 因为它涉及到 for each 并且在这种情况下事情可能有点奇怪

说到数据库有哪些代表性案例:

  • 单身table
  • Table 具有关系(外键)
  • ...

那么边缘情况呢?

  • 删除
  • 使用外键删除
  • 使用外键引用不存在的对象进行更新
  • ...

只是我想到的一些例子