如何使用递归对象进行单元测试

时间:2011-05-10 21:38:26

标签: c# unit-testing rhino-mocks

我有一个对象,它在构造函数中接受相同类型的参数:

public class Person {
    private Person theParent;
    private string theName;
    public Person(string aName, Person aParent)
    {
        if(aParent == null)
        {
            thrown new ArgumentNullException("aParent");
        }
        theParent = aParent;
        theName = aName;
    }
}

在我的单元测试中,我必须创建一个新的Person对象,但构造函数需要传入另一个Person对象。我通过获取Person在我的应用程序中克服了这个问题从数据库传入的对象(使用NHibernate及其所有魔法)*。我不想将数据库访问绑定到此测试,因为它没有测试任何数据库功能。我应该只是模拟父对象(我在其他一些测试中使用Rhino Mocks)还是有更好的方法来解决这个问题?

*保证数据库中总有一条记录可以检索以创建父对象。

2 个答案:

答案 0 :(得分:1)

我认为在某些时候你应该到达顶级节点?那么aParent的正确值是什么?

我的猜测是null,这意味着Person是第一行(对你的应用来说意味着什么,也许是Adam或其他什么?)。

答案 1 :(得分:0)

您可以测试递归函数调用的副作用,例如使用计数器字段变量来检查调用次数,将调用参数存储在某种容器中,单元测试可以检查它们等等。当然,你将在发布版本中删除所有这些东西。