2

xUnitを使用してC#コードをテストし、Visual StudioPremium2012を使用しています。

私のソリューションには、テストしているメインプロジェクトと、すべてのテストを含む2番目のプロジェクトがあります。私は100%のコードカバレッジにあると思われますが、私のテストプロジェクトには、100%に到達できない機能がいくつかあります。そのプロジェクトをコードカバレッジ結果に表示されないようにすることはできますか?

または...例外がスローされることを期待しているテストがあるときに、テスト関数を100%にする方法はありますか?例外をスローするメソッドのテストを作成しようとした方法のいくつかと、カバーされていないものを次に示します。MyBusinessLogicには、MyViewModelタイプのオブジェクトを受け入れるGenerateNameLineという名前の関数があります。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.");
}

このテストも合格です。しかし、コードカバレッジは、}私の直前にcatchヒットすることはないと言っています。

100%になる例外のテストを作成する方法がわかりません。私はそれが本当に重要ではないことを知っていますが、仕事では100%のコードカバレッジがdoneの定義の一部であるため、ここで何をすべきかわかりません。

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 でも 2 番目の問題が発生していますか?

于 2012-12-05T05:38:19.503 に答える
0

テストは除外しますが、カバー率が 99% 未満の場合は、一部のテストがまったく実行されていないことを示唆しているため、カバー率には注意が必要です。

ところで: 100% は理想であり、実際のプロジェクトでは達成できません。少なくとも、実際に 100% に到達するための努力は、90% のようなものではなく、不釣り合いに高いものです。また、正確なカバー率は、ヒット行のカウント方法によって異なります。

于 2012-09-17T08:15:59.730 に答える