如何进行基础测试 class 以测试不同存储库的常用方法(如 CRUD)?

How to make a base test class for testing common methods (like CRUD) of different repositories?

如果我有 2 个存储库,比如员工和部门,它们都有共同的 CRUD 操作。有没有一种方法可以让我建立一个共同的基础 class 来测试其中的共同方法?

在我的实际代码中,我有

public interface EntityRepo<E, ID> {
    E findById();
}

其实施 class:

public class EntityRepoImpl<E, ID> implements EntityRepo<E, ID>{
   // method implementing findById()
}

我的其他 2 个存储库界面如下所示:

public interface EmployeeRepo extends EntityRepo<Employee, Long>{

}
public interface DepartmentRepo extends EntityRepo<Department, Long>{

}

我想使用基础测试 class 对两个存储库使用 Junit 测试 findById。我将如何做?

我同意关于“这不是单元测试的目的”等评论。但如果您仍然需要这样做,也许,您可以这样做

public abstract class BaseRepoTest <T extends EntityRepo> {

    @Autowired
    T repo;

    @Test
    public void testRepo() {
        repo.findById(1L);
    }
}

然后您可以创建子 class 如下所示:

public class EmployeeRepoTest extends BaseRepoTest<EmployeeRepo> {
}

public class DepartmentRepoTest extends BaseRepoTest<DepartmentRepo> {
}

因为他们扩展了抽象基础测试 class,测试应该是 运行 对于 2 个子classes 提供的 Repo classes.