Одним из оптимальных решений было бы поместить материал, который происходит в "// do magic", в отдельный метод, чтобы его можно было тестировать модульно в отдельности - без необходимости вызова изнутри цикла while, который обрабатываетStreamReader.
Проблема, которую вы видите, связана с ленивой оценкой перечисления.Поскольку ни один из вашего тестового кода на самом деле не перечисляет «вещи», конечный автомат, созданный «за сценой» для обработки блока итератора, никогда не обрабатывается.
Вам нужно будет заставить элементыбыть перечисленным, чтобы фактически выполнить логику в методе Parse.Вы можете сделать это, используя метод «WhenCalled» Rhino.Mocks (я показываю синтаксис AAA, так как не помню, как использовать семантику записи / воспроизведения):
ПРИМЕЧАНИЕ. Этонепроверенный код
datamanager.Stub(d => d.Save(null)).IgnoreArguments().WhenCalled(m => int count = ((IEnumerable<string>)m.Arguments[0]).Count());
Что происходит, когда при вызове метода Save в вашей заглушке «WhenCalled» передается параметр (m), который содержит информацию о вызванном методе.Возьмите первый аргумент (вещи), приведите его к IEnumerable<string>
и получите его количество.Это заставит оценку перечислимого.