c# - 可以为这个表达式求值器类的私有(private)方法编写单元测试吗?

标签 c# unit-testing expression


我有以下代码

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/

相关文章:

java - 三元表达式有时会绕过编译器检查验证

c# - 当编译时类型未知时,将对象动态转换为类型

c# - 发送 HTTP header 后,Windows Auth Server 无法设置状态

c# - 是否可以从单元测试中显示 Windows 窗体?

javascript - react 测试库验证DOM嵌套错误

c++ - 如何测试断言?

c# - 通过 C# 打开 IE -> mailto 失败

c# - 自动属性验证

c# - Lumia imaging sdk 3 blur effect issue (找不到组件。(Exception from HRESULT : 0x88982F50))

javascript - 正则表达式在字符串中搜索两个字符串之间的内容