🗨️

Fine Code Coverageのカバレッジが.NETFrameworkだと動作しない問題の解決方法

2024/05/13に公開

C#ではVisualStudioに機能追加できるFine Code Coverageというツールを使ってテストコードのカバレッジをとることができますが、最近になってうまくカバレッジが表示されなくなったというご質問をいただきました。

私のほうで確認したところ、.NET8などを使ったテストプロジェクトでは正常に動作しましたが、
どうも.NETFrameworkでの単体テストでは、今回の現象が再現しているようです。

試行錯誤の結果、対応方法がわかりましたので、
その現象と対処方法の情報共有をさせていただきたいと思います。

現象

「CCC」という.NETFrameworkのクラスライブラリと、UnitTestProdect1という.NETFrameworkの単体テストプロジェクトがある状態です。

CCCプロジェクトの内容

CCCにはClass1とClass2というクラスがあり、それぞれ2つずつメソッドがあります

namespace CCC
{
  public static class Class1
  {
    public static int CaseA(int a, int b)
    {
      return a + b;
    }

    public static int CaseB(int a, int b)
    {
      return a - b;
    }
  }

  public static class Class2
  {
    public static int CaseA(int a, int b)
    {
      return a + b;
    }

    public static int CaseB(int a, int b)
    {
      return a - b;
    }
  }
}

単体テストプロジェクトの内容

単体テストプロジェクトには、Class1のCaseAのテストのみを行っています。

namespace UnitTestProject1
{
  [TestClass]
  public class UnitTest1
  {
    [TestMethod]
    public void TestMethod1()
    {
      Assert.AreEqual(3, Class1.CaseA(1, 2));
    }
  }
}

ですので、Class1のカバレッジは50%、Class2は0%になるはずです。しかし、この状態でテストを実施してFine Code Coverageの結果を見ると、次のような結果になります。

結果は100%になっており、しかも単体テストプロジェクトしか対象になっていません。

対処方法

対処方法は、Fine Code Coverageの設定画面で、
IncludeReferencedProjectsをTrueにするとうまく動作しました。

やり方は次の通りです。

VisualStudioのツールからオプションを選び、

Fine Code Coverageの「IncludeReferencedProjects」をTrueにします。

テストの再実行

この状態でテストコードを再実行し、Fine Code Coverageの結果を確認します。

これで正しくカバレッジが採れていることが確認できました。

同様の現象が発生している方は、試してみてください。

Discussion