Насмешка GetEnumerator () метод IEnumerable <T> типы

Я собирался комментировать, но у меня недостаточно репутации, чтобы сделать это. Видимо, то, что вы спрашиваете, пока невозможно. Об этом есть проблема в Github.

12
задан programmer 24 December 2008 в 13:36
поделиться

3 ответа

WhenCalled () API позволяет Вам динамично разрешить возвращаемые значения.

Изменение тестового сценария к следующему позволит этому передавать:

numbers.Stub(x => x.GetEnumerator())
                     .Return(null)
                     .WhenCalled(x => x.ReturnValue = 
                                    new List<int> { 1, 2, 3 }.GetEnumerator()
                                 );

Таким образом вместо того, чтобы возвратить тот же перечислитель, заблокированное поведение будет всегда возвращать новый перечислитель.

13
ответ дан 2 December 2019 в 20:19
поделиться

Оператор

numbers.Stub(x => x.GetEnumerator()).Return(new List<int> { 1, 2, 3 }.GetEnumerator());

идентично

var enumerator = new List<int> { 1, 2, 3 }.GetEnumerator();
numbers.Stub(x => x.GetEnumerator()).Return(enumerator);

В Вашем тесте Вы говорите Насмешкам Носорога давать идентичное IEnumerator<int> экземпляр enumerator дважды. Это не то, что Вы предназначили. Единственный экземпляр IEnumerator<int> хорошо только для одного перечисления, не двух перечислений (Reset() не поддерживается, обычно). Вы предназначили Насмешки Носорога для приведения двух различных примеров IEnumerator<int>, так, чтобы они могли быть суммированы отдельно, так же, как любой вызов любому другому GetEnumerator<int>() функция сделала бы.

3
ответ дан 2 December 2019 в 20:19
поделиться

Отказ от ответственности: Я работаю в Typemock

Я не знаю, можно ли использовать Носорога, чтобы сделать это, но можно использовать Изолятор с API AAA, который имеет точно, что Вы ищете -

[Test] 
public void Should_be_able_to_use_enumerator_more_than_once() 
{
   var numbers = Isolate.Fake.Instance<INumbers>();
   Isolate.WhenCalled(() => numbers).WillReturnCollectionValuesOf(new List<int>{ 1, 2, 3 });
   var sut = new ObjectThatUsesEnumerator(); 
   var correctResult = sut.DoSomethingOverEnumerator2Times(numbers); 
   Assert.IsTrue(correctResult); 
}

Поскольку больше информации видит Руководящие Наборы в Руководстве разработчика.

0
ответ дан 2 December 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: