我目前正在为我在洋葱架构中实现的Generic Repository进行测试。我的数据访问是使用Entity Framework Code First进行的。
由于我有一个通用的存储库,我几乎可以使用任何实体(POCO)作为存储库的通用类型。为了说明这一点,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
感谢您的帮助!
答案 0 :(得分:1)
泛型的概念是抽象出独立于确切数据类型的操作的核心代码(或扩展具体的数据)。测试每个可能的实现与完全没有任何泛型并测试所有实现相同
那么,在这里测试什么?与往常一样:关键代码。以一些代表性的例子来说明你的代码将处理什么,并为这些案例编写一些测试
为了解释这一点:假设你有这样的东西:
function add(int number1, number 2) {
return number1 + number2;
}
你会测试什么?你会测试每个可能的整数对吗?这没有任何意义!再次,选择一些具有代表性的案例并进行测试
在测试时,您不仅应该选择代表性案例,还应该选择 edge 案例。这是您知道某些条件将被测试的情况。例如:
function something(int number) {
for(int i = 0; i < number; i++) {
...
}
}
在那种情况下你会测试什么?好吧,一些有代表性的值会是-5,10 ......但是一个importante值是 0 因为它涉及到每一个并且在这种情况下事情可能有点奇怪
谈论数据库可能具有代表性的案例:
边缘情况怎么样?
我想到的一些例子