Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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# 方法,为什么单元测试不能覆盖所有块_C#_Unit Testing - Fatal编程技术网

C# 方法,为什么单元测试不能覆盖所有块

C# 方法,为什么单元测试不能覆盖所有块,c#,unit-testing,C#,Unit Testing,我有一个方法,它接受一个字符串作为输入,检查它是否为null,字符串的长度是否大于零,然后根据该字符串是否包含另一个字符串返回枚举。(以下显示11条if语句中的5条) 我执行的测试是:空输入、空输入、输入字符串包含条件、输入字符串不包含条件 [Test()] public void CheckStringIsNullTest() { string input = null; sapActivityEnums expectedResult = sapActivityEnums.Un

我有一个方法,它接受一个字符串作为输入,检查它是否为null,字符串的长度是否大于零,然后根据该字符串是否包含另一个字符串返回枚举。(以下显示11条if语句中的5条)

我执行的测试是:空输入、空输入、输入字符串包含条件、输入字符串不包含条件

[Test()]
public void CheckStringIsNullTest()
{
    string input = null;
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}


[Test()]
public void CheckStringIsEmptyTest()
{
    string input = string.Empty;
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}


[Test()]
public void CheckStringCorrectParmTest()
{
    string input = "WeeklySapReport_07_02_2107_25437865.xlsx";
    sapActivityEnums expectedResult = sapActivityEnums.Weekly;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}



[Test()]
public void CheckStringIncorrectParmTest()
{
    string input = "Weekly_SapReport_07_02_2017_25437865.xlsx";
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}

这给了我80%的代码覆盖率。我只是很清楚为什么没有涵盖所有的代码块。我是否必须对包含“WeeklySap”、“DailySap”等的输入sting进行测试?完整的方法检查10个条件,因此我需要10个测试吗

是的。代码覆盖率执行所有测试,并记忆在执行时通过的代码行(或者更具体地说是哪些表达式)


此传递的表达式是您的代码覆盖率。为了获得100%的代码覆盖率,您的单元测试需要访问生产源中的所有语句

您将需要对每个场景进行测试,并需要一个测试用例来运行它。如果在没有两个测试用例的情况下运行测试,那么只会运行一个测试。此外,如果您正在测试与枚举同名的字符串,您可能有兴趣尝试将该字符串解析为enum,如果解析失败,则返回未分配的enum。Switch在代码中速度更快,但编写速度较慢,并引入了更多需要注意的地方

你真的不需要有10个单独的测试。请看一下测试用例:。一个用不同测试用例初始化的测试可以解决您的问题


希望这有帮助

请发布一篇文章。这显然不是您真正的代码,因为它不会编译,而且您还没有展示您正在使用的测试。我还希望您的代码覆盖率工具向您显示未覆盖的区域。“我必须对包含test1的输入sting进行测试,并对包含test2的字符串进行另一个测试吗?”他们可能会测试不同的代码路径,不是吗?如果(!string.IsNullOrEmpty(input))只需一个旁注
这不是精通编码的问题。这是一个在提出问题之前进行尽职调查的问题。如果你不在你的机器旁,所以不能问一个好问题,那很好。。。答案是等到你能问一个好问题,而不是问一个坏问题。请记住,堆栈溢出的目的不是让您尽快得到答案,而是建立一个好问题和答案的存储库。实现这一目标的正确方法是花时间问你的问题。“额外的行会有什么不同?”它们会表明你在测试你认为正在测试的东西,一方面。同样,如果您发布了有效的代码,则更可能是您的实际代码-鉴于您尚未发布实际代码,我们无法知道实际代码和实际代码之间可能存在哪些重要差异。如果你对学习感兴趣,这是你能从这个问题中学到的最重要的东西:如何提出更好的问题。谢谢。字符串取自用户选择的文件,因此它们与我的枚举不同。我生成了一个可接受的文件名列表以进行测试,因为这只是验证过程的一部分。我打算使用switch语句,但由于我正在对字符串执行contains(因为完整的文件名不是静态的),所以我不能。我知道这是c#7.0的一个特性,但我们没有使用它。
[Test()]
public void CheckStringIsNullTest()
{
    string input = null;
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}


[Test()]
public void CheckStringIsEmptyTest()
{
    string input = string.Empty;
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}


[Test()]
public void CheckStringCorrectParmTest()
{
    string input = "WeeklySapReport_07_02_2107_25437865.xlsx";
    sapActivityEnums expectedResult = sapActivityEnums.Weekly;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}



[Test()]
public void CheckStringIncorrectParmTest()
{
    string input = "Weekly_SapReport_07_02_2017_25437865.xlsx";
    sapActivityEnums expectedResult = sapActivityEnums.Unassigned;

    Assert.AreEqual(expectedResult, Util.CheckString(input);
}