Как выполнить юнит-тест с рекурсивным объектом - PullRequest
2 голосов
/ 11 мая 2011

У меня есть объект, который принимает в конструкторе параметр того же типа:

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 ]

1 голос
/ 11 мая 2011

Я предполагаю, что в какой-то момент ожидается, что вы достигнете верхнего узла? Каково правильное значение для aParent тогда?

Мое предположение было бы null, и это означало бы, что Person является самым первым в своей строке (что бы это ни значило для вашего приложения, возможно Адам или что-то в этом роде?).

0 голосов
/ 07 декабря 2017

Вы можете проверить побочные эффекты рекурсивного вызова функции, например, использовать переменную поля счетчика для проверки количества вызовов, сохранить параметр вызова в каком-либо контейнере, где Unit Test может их проверить и т. Д. Конечно, вы удалите все эти вещив сборке релиза.

...