【发布时间】:2017-07-19 09:17:24
【问题描述】:
我有一个将字符串作为输入的方法,检查它是否不为空并且字符串的长度是否大于零,然后根据字符串是否包含另一个字符串返回 Enums。 (下面显示了 11 个 if 语句中的 5 个)
public static sapActivityEnums CheckString(string input)
{
if(!input.IsNullOrEmpty(input))
{
if(input.Contains("DailySap"))
{
return sapActivityEnums.Daily;
}
if(input.Contains("WeeklySap"))
{
return sapActivityEnums.Weekly;
}
if(input.Contains("MonthlySap"))
{
return sapActivityEnums.Monthly;
}
if(input.Contains("QuarterltSap"))
{
return sapActivityEnums.Quarterly;
}
if(input.Contains("YearlySap"))
{
return sapActivityEnums.Yearly;
}
}
return sapActivityEnums.Unassigned;
}
我执行的测试是:空输入,空输入,输入字符串包含条件,输入字符串不包含条件..
[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”等的输入字符串进行测试?完整的方法检查 10 个条件,所以我需要 10 个测试吗?
【问题讨论】:
-
请发帖minimal reproducible example。这显然不是你的真实代码,因为它不会编译,而且你没有展示你正在使用的测试。我还希望您的代码覆盖工具能够向您展示未覆盖的区域。
-
"我是否必须对包含 test1 的输入字符串进行测试,对包含 test2 的字符串进行另一个测试?"那么他们会测试不同的代码路径,不是吗?
-
只是附注
if (!string.IsNullOrEmpty(input)) -
这不是精通编码的问题。这是在提出问题之前进行尽职调查的问题。如果你不在你的机器旁,所以不能问一个好问题,那很好......答案是等到你可以问一个好问题而不是问一个坏问题。请记住,Stack Overflow 的目的不是让您尽快得到答案 - 它是建立一个好的问题和答案的存储库。实现该目标的正确方法是花时间提出问题。
-
"额外的行有什么不同?"他们会证明你正在测试你认为你正在测试的东西,一方面。同样,如果您发布了有效代码,则更有可能是您的 实际 代码 - 鉴于您尚未发布您的 实际 代码,我们无法知道您的实际代码和实际代码之间可能存在哪些重要差异。如果你有兴趣学习,这是你可以从这个问题中学到的最重要的东西:如何提出更好的问题。
标签: c# unit-testing