c# – 如何对相互递归方法进行单元测试?

c# – 如何对相互递归方法进行单元测试?,第1张

概述我有三个看起来像这样的函数: private Node GetNode(Node parentNode){ var node = new node(); switch (parentNode.NodeType) { case NodeType.Multiple: node = GetMultipleNode(parentNode) ca 我有三个看起来像这样的函数:
private Node GetNode(Node parentNode){    var node = new node();    switch (parentNode.NodeType)    {       case NodeType.Multiple:    node = GetMultipleNode(parentNode)       case NodeType.Repeating:   node = GetRepeatingNode(parentNode)    }    return node;}private Node GetMultipleNode(Node parentNode){    foreach (var child in parentNode.Children)        return GetNode(child);}private Node GetRepeatingNode(Node parentNode){    for (int i=0; i < parentNode.Count; i++)         return GetNode(new Node(i));  // Assume meaningful constructor for Node}

鉴于这三种方法是相互递归的,那么如何独立地对它们进行单元测试呢?

解决方法 通常,您不需要单独测试每个方法 – 您可以测试顶级方法是否正确.

但是,如果由于某种原因您希望单独测试每个方法,则可以像测试任何具有依赖项的方法一样使用依赖项注入.这里唯一的区别是依赖是对象本身.以下是一些示例代码来演示这个想法:

class NodeGetter : INodeGetter{    public Node GetNode(Node parentNode)    {        return GetNode(parentNode,this);    }     public Node GetNode(Node parentNode,INodeGetter nodeGetter)    {        switch (parentNode.NodeType)        {           case NodeType.Multiple:               return nodeGetter.GetMultipleNode(parentNode,nodeGetter);           case NodeType.Repeating:               return nodeGetter.GetRepeatingNode(parentNode,nodeGetter);           default:               throw new NotSupportedException(                   "Node type not supported: " + parentNode.NodeType);        }    }    public Node GetMultipleNode(Node parentNode,INodeGetter nodeGetter)    {        foreach (Node child in parentNode.Children)        {            return nodeGetter.GetNode(child);        }    }    public Node GetRepeatingNode(Node parentNode,INodeGetter nodeGetter)    {        for (int i = 0; i < parentNode.Count; i++)        {            // Assume meaningful constructor for Node            return nodeGetter.GetNode(new Node(i));        }    }}

测试nodegetter参数时,传递一个mock.

我还将您的方法从私有更改为公共,因为最好只测试您的类的公共接口.

总结

以上是内存溢出为你收集整理的c# – 如何对相互递归方法进行单元测试?全部内容,希望文章能够帮你解决c# – 如何对相互递归方法进行单元测试?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存