我有以下代码
public interface IInterpreter
{
decimal Evaluate(string expression);
}
public class Interpreter : IInterpreter
{
public decimal Evaluate(string expression)
{
if (String.IsNullOrWhiteSpace(expression))
throw new ArgumentException("Parameter " + nameof(expression) + " cannot be empty");
var rpnExpression = ConvertToReversePolishNotation(expression);
return EvaluateReversePolishExpression(rpnExpression);
}
...
}
这个类将评估像“5+5*6”或“(3-5)*(2+2)+5”这样的表达式
现在我想写单元测试。这里唯一的公共(public)函数是 Evaluate
,根据所有建议,只应测试此方法。
问题是我有一种强烈的感觉,ConvertToReversePolishNotation(expression)
EvaluateReversePolishExpression(rpnExpression)
函数都必须包含单元测试...如果某些单元测试失败对于 Evaluate
方法,它不会指出错误在哪里(在 ConvertToRPNExpression
方法中或在 EvaluateReversePolishExpression
函数中)。
所以问题是 - 在这种情况下可以为私有(private)函数编写单元测试吗?
最佳答案
没有。
将 ConvertToReversePolishNotation
方法重构为一个单独的类。它关注的是皈依。
解释器关心的是评估。如果您“模拟”转换的输出,使用公共(public) Evaluate
方法应该很容易测试。
关于c# - 可以为这个表达式求值器类的私有(private)方法编写单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080488/