TDD代码覆盖状态

iop*_*iop -1 c# tdd unit-testing code-coverage

我的项目总体代码覆盖率为72.86%,其中106个测试用例失败,1个跳过测试用例,925个测试用例通过.共有1032个测试用例.覆盖范围内有4个子覆盖范围:

  1. BusinessLogic.dll:67.72%
  2. datalogic.dll:18.83%
  3. dataobject.dll:50.00%
  4. testbusinesslogic.dll:86.01%

我只知道testbusinesslogic.dll,并让测试通过.我不知道其余的(Business.dll/datalogic.dll/dataobject.dll),因为我无法调试该方法.

  1. 如何提高该区域代码覆盖率?
  2. 我可以在那里编辑代码吗?
  3. 我该怎么办才能通过测试?
  4. 或者其余的106个测试用例仅在"testbusinesslogic.dll"中失败?
  5. 如果我通过了所有测试用例,那么3个子代码覆盖率是否会增加?(如果测试用例仅在testbusinesslogic.dll中)

这是我第一次做TDD.

下面是datalogic.dll文件中的1个方法,此方法不会出现在我的失败/传递/跳过的测试用例中.这意味着什么?为什么这部分的代码覆盖率会如此之低?如何增加datalogic.dll部分的代码覆盖率?因为我没有失败的测试用例允许我像testbusinesslogic.dll一样通过它

public void GetModelDataForCreate(DataSet availabilityDataSet, int resourceID)
    {

        Database db = WindowsApplicationTemplate.ApplicationDatabase.DatabaseFactory.CreateDatabase();

        string sqlProcedure = "uspAvailabilityGetModelDataForCreate";
        DbCommand dbCommand = db.GetStoredProcCommand(sqlProcedure);
        UtilityDL.SetCommandTimeout(dbCommand);
        db.AddInParameter(dbCommand, "resourceID", DbType.Int32, resourceID);

        string[] tables = new string[] { "EventType", "LaborCategory", "Event", "IntelTime", "DurationType", "Resource", "ParameterInfo" };

        availabilityDataSet.Clear();

        // RETRIEVE DATA FROM DB AND LOAD INTO DATASET
        db.LoadDataSet(dbCommand, availabilityDataSet, tables);

    }
Run Code Online (Sandbox Code Playgroud)

Kei*_*yne 6

所以,首先要做的事情是:你没有正确地做TDD.在TDD中,一次只能有一个失败的测试 - 你正在为其编写代码.

(当你遇到重新分解的狂热点并引入新的缺陷时,可能会有其他人,但这些是很快就能解决的急性事件.)

这是TDD的副作用,而不是目标.您使用的过程以及您在TDD中执行的操作会导致这种状态.

TDD是一项学到的技能.教程会让你开始,但要熟练需要大量的练习.但不要灰心!如果你在实际工作中这样做,开发TDD专业知识是非常愉快的.用于说明TDD的人为设想的例子是可以预见的无聊和无用的,经常是错误的.

接下来,关于测试覆盖率,您不希望包含testbusinesslogic在总数中.您可以使用特定于测试工具的属性来排除整个DLL.对于MSTest,信息位于" 排除/包含"部分中的https://msdn.microsoft.com/en-us/library/jj159530.aspx.

此外,许多失败的测试可以在测试失败时降低代码覆盖率,因为在测试代码中抛出了异常,这导致在测试期间永远不会执行以下代码.如果您有很多这些,可能是您的测试设置不正确.

最后,除非您可以编辑DLL中的代码,否则您将无法获得成功.测试的目的是纠正缺陷.测试你无法触及的代码是没用的.