在我编写代码单元测试时,困扰我的一件事是方法测试是否应该包括验证其他方法的结果?当然,公开的方法。让我们看看一个相当琐碎的例子:
public int Solve(string forumla)
{
if (forumla.Contains("+"))
{
return SolveAddition(formula);
}
if (forumla.Contains("-"))
{
return SolveSubstraction(formula);
}
throw new ArgumentException();
}
public int SolveAddition(string formula)
{
var strings = formula.Split('+');
if (strings.Length != 2)
{
throw new ArgumentException();
}
int firstFactor = int.Parse(strings[0]);
int secondFactor = int.Parse(strings[0]);
return firstFactor + secondFactor;
}在这种情况下,Solve方法的测试应该只测试控制流,还是SolveAddition的每一种可能的场景?让我们假设,SolveAddition和SolveSubstraction有它们自己的测试。
换句话说,Solve的测试场景应该只包含以下内容:
或还包括:
诚挚的问候
发布于 2014-07-30 09:26:18
不,单元测试应该测试它正在运行的东西,而不是其他东西。您可以假设此方法调用的任何其他方法都是正确的,因为它们必须有自己的单元测试。
如果这些助手方法中的一个是错误的,那么在运行另一个测试时,您会得到一个警告,而且由于您应该运行整个测试套件,并且只有在整个套件成功时才进行推送,所以第二次测试相同的东西只是浪费时间。
发布于 2014-07-30 16:34:56
对于任何给定的代码段,最多应该有一个地方负责对该代码进行详尽的测试。
顺便说一句,可以有任何数字来测试它;你只是不想浪费精力,跑上一座成倍的大山。
对于您的示例,测试用例的最小集合是一个无效论坛列表,以及一个包含预期答案的有效公式列表。如果将加法和减法分开,这些列表在总体上不会变得更短。
因此,测试这三个功能的正确地方就是通过“解决方案”。
这样,当您决定需要处理'2 +3-1‘时,您只需将其从一个列表移到另一个列表。
https://softwareengineering.stackexchange.com/questions/251679
复制相似问题