我有一个简单的方法来计算集合中的总数。分支机构的报道与foreach?
public void MethodToTest(Collection<int> collection)
{
int sum = 0;
foreach (int value in collection)
{
sum += value;
}
}
目标是在分支覆盖率下使用在命令行中运行的opencoverage工具获得100%。我也得到了调用该方法MethodToTest的单元测试:
[TestMethod]
public void TestMethodToTest()
{
BomProviderMock mock = new BomProviderMock();
BomManager bomManager = new BomManager(mock);
List<int> list = new List<int>();
for (int i = 0; i <= Int16.MaxValue; i++)
{
list.Add(i);
}
// Firts attempt with a non empty collection
bomManager.MethodToTest(new Collection<int>(list));
// Second attempt with an empty collection
bomManager.MethodToTest(new Collection<int>());
}
已经使用的工具opencover,MethodToTest在分支覆盖了80%的方法之后。我的问题是,foreach循环是否会影响分支覆盖率,如果是的话,我怎样才能用这个简单的代码获得100%的分数呢?
而不是编写一个foreach你不能使用集合的扩展方法'foreach'并创建一个委托? (http://msdn.microsoft.com/zh-cn/library/bwabdf9z(v = vs.110).aspx) – MethodMan 2014-09-30 21:43:41
我使用其他代码覆盖工具(DotCover)运行代码示例,我有100%的代码覆盖率。难道是因为代码得到优化并且不被您的覆盖工具计算,所以不包含'sum + = value;'?在这种情况下添加一条语句'Debug.WriteLine(sum);'可能会有所帮助。 – Sjips 2014-09-30 21:49:51
OpenCover查看通过编译代码生成的IL,有时编译器会添加更多的分支IL语句,因为它们可以映射到您的代码,因此它使得使用OpenCover很难获得100%的分支覆盖率。有时候团队会考虑优化一些,但并不经常(我会将其添加到候选人列表中)。 – 2014-10-01 22:36:26