Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TDD代码覆盖状态_C#_Unit Testing_Tdd_Code Coverage - Fatal编程技术网

C# TDD代码覆盖状态

C# TDD代码覆盖状态,c#,unit-testing,tdd,code-coverage,C#,Unit Testing,Tdd,Code Coverage,我的项目的总体代码覆盖率为72.86%,有106个失败的测试用例、1个跳过的测试用例和925个通过的测试用例。总共有1032个测试用例。覆盖范围内有4个子覆盖范围,分别为: BusinessLogic.dll:67.72% datalogic.dll:18.83% dataobject.dll:50.00% testbusinesslogic.dll:86.01% 我只了解testbusinesslogic.dll,并通过测试。 我不知道其余部分(Business.dll/datalogic.d

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

  • BusinessLogic.dll:67.72%
  • datalogic.dll:18.83%
  • dataobject.dll:50.00%
  • testbusinesslogic.dll:86.01%
  • 我只了解testbusinesslogic.dll,并通过测试。 我不知道其余部分(Business.dll/datalogic.dll/dataobject.dll),因为我无法调试该方法

  • 我如何提高代码覆盖率
  • 我可以在那里编辑代码吗
  • 我该怎么做才能通过考试
  • 或者只有在“testbusinesslogic.dll”中的106个失败测试用例中的其余部分
  • 如果我通过了所有测试用例,那么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);
    
        }
    

    因此,首先要做的是:您没有正确地执行TDD。在TDD中,一次只能有一个失败的测试—您正在为其编写代码的测试

    (当您达到重新分解的狂热点并引入新的缺陷时,可能还有其他缺陷,但这些都是可以迅速解决的尖锐事件。)

    这是TDD的副作用,而不是目标。您在TDD中使用的过程和采取的行动导致了这种存在状态

    TDD在很大程度上是一种学习技能。教程会让你开始学习,但要精通需要大量的练习。但不要灰心!如果您在实际工作中这样做,那么开发TDD专业知识是非常愉快的。可以预见,用于说明TDD的人为示例是乏味的、无用的,而且常常是错误的

    接下来,关于测试覆盖率,您不希望将
    testbusinesslogic
    包括在总数中。您可以使用特定于测试工具的属性排除整个DLL。对于MSTest,信息位于排除/包括部分

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


    最后,除非您可以在DLL中编辑代码,否则您将不会取得总体成功。测试的目的是纠正缺陷。测试您不能触摸的代码有点无用。

    测试覆盖率报告在运行测试时执行了多少代码

    您的测试程序集testbusinesslogic.dll的覆盖率与此无关(但我觉得奇怪,它实际上不接近100%,可能会研究为什么会出现这种情况)。一个好的指标可能是其他(生产)程序集的覆盖率%

    如果您想获得这些生产程序集的更高覆盖率,您需要自己在testbusinesslogic.dll中编写更多测试,在那里执行未覆盖的代码。这是提高他们测试覆盖率的唯一方法

    注意:单元测试“只是为了增加代码覆盖率”通常是个坏主意。编写测试以获得安全网、回归测试、驱动设计等。但是,编写测试只是为了提高某个任意的百分比,并没有什么好处


    正如Keith Payne所说,您可能正在进行测试优先开发(您的单元测试在生产代码之前就已经存在),但您并不是真正在进行测试驱动的开发。

    我对您的要求感到困惑。为了增加代码覆盖率,您需要编写更多的测试。为了让测试通过,你需要修改代码。我有上千个测试用例,而如果100%的代码覆盖率并不意味着代码覆盖了所有测试用例。我的问题是如何增加(1)/(2)/(3)子代码覆盖率,因为那里的百分比很低。这与“testbusinesslogic.dll”的方式相同吗?因为我可以在“testbusinesslogic.dll”中调试并找到错误,然后通过了测试。但是,对于其余3个子代码覆盖范围,我不能这样做。如果我错了,请纠正我。这正是我目前的经历。=)是的,我正在解决失败测试用例,但我只是好奇的是,我只需要解决testbusinesslogic.dll中的所有失败测试用例?BusinessLogic.dll:67.72%,datalogic.dll:18.83%,dataobject.dll:50.00%怎么样。这3个部分不会给我任何失败测试用例或错误?我如何找出代码背后发生了什么,使这些部分的代码覆盖率很低?