Предположим, у меня есть какой-то метод, который возвращает объект IEnumerable<int>
.Эти методы используют ключевое слово yield return
для создания бесконечной последовательности.Пример алгоритма Фибоначчи:
public static IEnumerable<long> Fibonacci()
{
long x = 0L;
long y = 1L;
long z;
yield return x;
yield return y;
while (true)
{
z = x + y;
yield return z;
y = x;
x = z;
}
}
Как правильно создать модульный тест для такой последовательности?Под словом я имею в виду читабельность.
Я могу написать модульные тесты следующим образом:
[TestMethod]
public void FibonacciTest()
{
var actual = MyClass.Fibonacci();
var @enum = actual.GetEnumerator();
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 0);
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 1);
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 1);
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 2);
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 3);
Assert.IsTrue(@enum.MoveNext();
Assert.AreEqual(@enum.Current), 5);
Assert.IsTrue(@enum.MoveNext();
}
Этот тест работает, но я не думаю, что он читаемый.Каковы общие (аллогритм Фибоначчи был только примером) рекомендации по написанию модульных тестов для последовательностей?
PS: я использую Visual Studio OOB Test Suite + Pex.