.NETのユニットテストの道の3:コードオーバーライド率の計算
32873 ワード
ビジネスコードとテストコードの準備
public class Calc
{
public int AbsAdd(int a, int b)
{
if (a > 0)
return a + b;
else
return (-1) * a + b;
}
public int Abs(int a)
{
if (a > 0)
return a;
return -1 * a;
}
}
[TestClass]
public class CalcTest
{
[TestMethod]
public void Add_Test()
{
Calc calc = new Calc();
var s = calc.AbsAdd(3, 6);
Assert.AreEqual(s, 9);
}
[TestMethod]
public void AbsAdd_Test()
{
Calc calc = new Calc();
var s = calc.Abs(-3);
Assert.AreEqual(s, 3);
}
}
VSでテストを実行し、テストの上書き度をチェックし、コード行を色で上書きする
コマンドラインでユニットテストを実行し、コードオーバーライドを確認します。
xml version="1.0" encoding="UTF-8" ?>
<results>
<modules>
<module name="ut.dll" path="ut.dll" id="1F16FE5964AEE54C9413C7FB6B33EDAC01000000" block_coverage="100.00" line_coverage="100.00" blocks_covered="8" blocks_not_covered="0" lines_covered="10" lines_partially_covered="0" lines_not_covered="0">
<functions>
<function id="8272" token="0x6000001" name="Add_Test()" namespace="UT" type_name="CalcTest" block_coverage="100.00" line_coverage="100.00" blocks_covered="4" blocks_not_covered="0" lines_covered="5" lines_partially_covered="0" lines_not_covered="0">
<ranges>
<range source_id="0" covered="yes" start_line="12" start_column="9" end_line="12" end_column="10" />
<range source_id="0" covered="yes" start_line="13" start_column="13" end_line="13" end_column="36" />
<range source_id="0" covered="yes" start_line="14" start_column="13" end_line="14" end_column="39" />
<range source_id="0" covered="yes" start_line="15" start_column="13" end_line="15" end_column="35" />
<range source_id="0" covered="yes" start_line="16" start_column="9" end_line="16" end_column="10" />
ranges>
function>
<function id="8312" token="0x6000002" name="AbsAdd_Test()" namespace="UT" type_name="CalcTest" block_coverage="100.00" line_coverage="100.00" blocks_covered="4" blocks_not_covered="0" lines_covered="5" lines_partially_covered="0" lines_not_covered="0">
<ranges>
<range source_id="0" covered="yes" start_line="19" start_column="9" end_line="19" end_column="10" />
<range source_id="0" covered="yes" start_line="20" start_column="13" end_line="20" end_column="36" />
<range source_id="0" covered="yes" start_line="21" start_column="13" end_line="21" end_column="34" />
<range source_id="0" covered="yes" start_line="22" start_column="13" end_line="22" end_column="35" />
<range source_id="0" covered="yes" start_line="23" start_column="9" end_line="23" end_column="10" />
ranges>
function>
functions>
<source_files>
<source_file id="0" path="D:\1\UT\UT\UnitTest1.cs">
source_file>
source_files>
module>
<module name="bizlogic.dll" path="bizlogic.dll" id="3CCBE3B7A33CB441A19683A78A499F7901000000" block_coverage="75.00" line_coverage="80.00" blocks_covered="6" blocks_not_covered="2" lines_covered="8" lines_partially_covered="0" lines_not_covered="2">
<functions>
<function id="8272" token="0x6000001" name="AbsAdd(int, int)" namespace="BizLogic" type_name="Calc" block_coverage="75.00" line_coverage="80.00" blocks_covered="3" blocks_not_covered="1" lines_covered="4" lines_partially_covered="0" lines_not_covered="1">
<ranges>
<range source_id="0" covered="yes" start_line="12" start_column="9" end_line="12" end_column="10" />
<range source_id="0" covered="yes" start_line="13" start_column="13" end_line="13" end_column="23" />
<range source_id="0" covered="yes" start_line="14" start_column="17" end_line="14" end_column="30" />
<range source_id="0" covered="no" start_line="16" start_column="17" end_line="16" end_column="37" />
<range source_id="0" covered="yes" start_line="17" start_column="9" end_line="17" end_column="10" />
ranges>
function>
<function id="8312" token="0x6000002" name="Abs(int)" namespace="BizLogic" type_name="Calc" block_coverage="75.00" line_coverage="80.00" blocks_covered="3" blocks_not_covered="1" lines_covered="4" lines_partially_covered="0" lines_not_covered="1">
<ranges>
<range source_id="0" covered="yes" start_line="19" start_column="9" end_line="19" end_column="10" />
<range source_id="0" covered="yes" start_line="20" start_column="13" end_line="20" end_column="23" />
<range source_id="0" covered="no" start_line="21" start_column="17" end_line="21" end_column="26" />
<range source_id="0" covered="yes" start_line="22" start_column="13" end_line="22" end_column="27" />
<range source_id="0" covered="yes" start_line="23" start_column="9" end_line="23" end_column="10" />
ranges>
function>
functions>
<source_files>
<source_file id="0" path="D:\1\UT\BizLogic\Calc.cs">
source_file>
source_files>
module>
modules>
results>
指定したdllのオーバーライド率のみを計算します。
デフォルトでは、vstestは、指定したdllディレクトリのpdbファイルのあるdllをすべて計算します.これにより,我々が関心を持たない基礎dll,サードパーティdllがドープされ,計算時間が長く,総被覆率が不正確になる.したがって、オーバーライド率を計算したいdllを指定するか、関心のないdllを排除する必要があります.方法は、CodeCoverageコマンドでconfigファイルを指定し、configファイルで指定dllを除外するか、特定dllのみを計算します.正規表現をサポートします.Foundationを含むdllを除外<ModulePaths>
<Exclude>
<ModulePath>.*Foundation.*ModulePath>
Exclude>
ModulePaths>
プロファイルのテンプレートは、マイクロソフトの公式ではなく、CodeCoverageに行きます.exeディレクトリの下で構成を探してコピーします.ディレクトリ:C:Program Files(x 86)Microsoft Visual Studio2017EnterpriseTeam ToolsDynamic Code Coverage Tools