Допустим, я, например, иметь этот класс, который генерирует последовательность чисел Фибоначчи:C#: Как вы тестируете метод IEnumerable.GetEnumerator()?
public class FibonacciSequence : IEnumerable<ulong>
{
public IEnumerator<ulong> GetEnumerator()
{
var a = 0UL;
var b = 1UL;
var c = a + b;
while (true)
{
yield return c;
c = a + b;
a = b;
b = c;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
Затем я могу написать тест, который гарантирует, что п первые числа в последовательности являются правильными.
[Test]
public void GetEnumerator_FirstFifteenNumbers_AreCorrect()
{
var sequence = new FibonacciSequence().Take(15).ToArray();
CollectionAssert.AreEqual(sequence, new[] {1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610});
}
Когда я проверяю для покрытия, однако, я буду видеть, что метод IEnumerable.GetEnumerator() не тестировался, и мое освещение будет ниже, чем это действительно необходимо. Справедливо. Но как я должен проверить этот метод?
Как вы обычно справляетесь с этим?
Хмм, из любопытства, как вы проверяете покрытие для испытаний? Похоже на интересную особенность. – Ian
Да, я тоже об этом задумался, хе-хе. Но нашел в нем кнопку в TestDriven.Net, которая, кстати, довольно удивительна. Если вы еще не пробовали, вы должны! После его установки вы можете щелкнуть правой кнопкой мыши по вашему решению (в проводнике решений) и выбрать Test With -> Coverage. Легко, как это :) – Svish
Если у вас есть версия VS Team System, инструменты тестирования включают в себя инструмент покрытия, который вы можете запускать с помощью TestDriven.Net или в обычном интерфейсе. В противном случае, если вы используете инструменты для тестирования Google для Visual Studio, их несколько. NCover может быть наиболее часто используемым. – McMuttons