2

我正在使用 xUnit 来测试我的 C# 代码,并且我正在使用 Visual Studio Premium 2012。

在我的解决方案中,我有我正在测试的主要项目和包含我所有测试的第二个项目。我应该达到 100% 的代码覆盖率,但我的测试项目中有一些功能无法达到 100%。我可以将该项目排除在代码覆盖结果中吗?

或者......现在有没有人在您期望抛出异常的测试时如何将测试功能提高到 100%?以下是我尝试为应该引发异常的方法编写测试的一些方法,以及未涵盖的内容。MyBusinessLogic 有一个名为 GenerateNameLine 的函数,它接受 MyViewModel 类型的对象。如果 MyViewModel 的 Name 属性是一个空字符串,它应该抛出一个 RequiredInformationMissingException 类型的异常。

[Fact]
public void TestMethod1()
{
  var vm = new MyViewModel();
  vm.Name = string.Empty;

  Assert.Throws<RequiredInformationMissingException>(delegate { MyBusinessLogic.GenerateNameLine(vm); });
}

这个测试通过了,但是代码覆盖率用颜色突出显示它MyBusinessLogic.GenerateNameLine(vm);没有被击中。

我也试过:

[Fact]
public void TestMethod1
{
  bool fRequiredInfoExceptionThrown = false;
  var vm = new MyViewModel();
  vm.Name = string.Empty;

  try
  {
    MyBusinessLogic.GenerateNameLine(vm);
  }
  catch (Exception ex)
  {
    if (ex.GetType() == typeof(RequiredInformationMissingException))
      fRequiredInfoExceptionThrown = true;
  }

  Assert.True(fRequiredInfoExceptionThrown, "RequiredInformationMissingException was not thrown.");
}

这个测试也通过了。但是代码覆盖率}在 mycatch永远不会被击中之前说正确的。

我不知道如何为获得 100% 的异常编写测试。我知道这并不重要,但在工作中 100% 的代码覆盖率是我们对完成的定义的一部分,所以我不知道在这里做什么。

4

2 回答 2

1

答案是肯定的

我们提供过滤器来自定义您想要通过 .runsettings 文件包含/排除的内容。您可以过滤掉几乎所有您认为无用的东西。[ExcludeFromCodeCoverage] 属性也可以在代码中使用。

请参阅:http: //blogs.msdn.com/b/sudhakan/archive/2012/05/11/customizing-code-coverage-in-visual-studio-11.aspx

您是否也看到了 VS2012RTM+Update1 中的第二个问题?

于 2012-12-05T05:38:19.503 回答
0

我会排除测试,但仍然关注它们的覆盖率,因为低于 99% 的覆盖率表明其中一些根本没有运行。

BTW:100% 是一种理想,在现实生活中的项目中是无法实现的。至少实际达到 100% 反对 90% 的努力是不成比例的高。准确的覆盖率也取决于计算命中线的方式。

于 2012-09-17T08:15:59.730 回答