【发布时间】:2012-03-05 00:42:31
【问题描述】:
假设我有一些返回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 测试套件 + Pex。
【问题讨论】:
标签: c# unit-testing yield sequences