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