1

我已经开始考虑在我的项目中围绕一些业务逻辑添加一些单元测试。

我想测试的第一个方法是我的服务层中的一个方法,它返回给定节点的子节点列表。

该方法如下所示:

public List<Guid> GetSubGroupNodes(string rootNode)
{
    List<Tree> tree = ssdsContext.Trees.ToList();
    Tree root = ssdsContext.Trees.Where(x => x.UserId == new Guid(rootNode)).FirstOrDefault();
    return GetChildNodeIds(root, tree);
} 

private List<Tree> GetChildNodes(Tree rootNode, List<Tree> tree)
{
    kids.Add(rootNode);
    foreach (Tree t in FindChilden(rootNode, tree))
    {
        GetChildNodes(t, tree);
    }
     return kids;
}

我对这样的东西进行成像测试的方式是提供一个假的树结构,然后测试提供一个节点是否返回正确的子节点。

ssdsContext是一个ObjectContext

我已经看到它可以为ObjectContext 如何在实体框架中模拟 ObjectContext 或 ObjectQuery<T> 进行提取和接口?但我也读过嘲笑 aDBContext是浪费时间Unit Testing DbContext

我还读到,因为实体框架是存储库模式和工作单元的实现,这里是:Generic Repository With EF 4.1 what is the point

这让我有点困惑......是测试这样的方法来创建存储库层的唯一真正方法吗?甚至值得对这种方法进行单元测试吗?

4

1 回答 1

2

将 ObjectContext 类包装在一个 wrapperclass 中——为了好玩,我们称它为 ContextWrapper——它只公开你需要的东西。然后,您可以使用您的方法将这个(IContextWrapper)的接口注入到您的类中。包装器可以在没有附加到外部世界的钩子的情况下进行模拟。正如您所说,树结构很容易创建,并且可以从您的模拟对象中获取。从而使您的测试成为真正的单元测试,而不是一种集成测试。

于 2012-10-03T10:55:40.583 回答