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# – 如何对相互递归方法进行单元测试?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)