私はコードこの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 * 6" のような式を評価したりします "(3-5)*(2 + 2)+5"
を以下のカントー今私が欲しいいますユニットテストを書く。ここで公開されている唯一の関数はEvaluate
であり、すべての勧告によれば、このメソッドのみをテストする必要があります。
問題は、私は両方のConvertToReversePolishNotation(expression)
EvaluateReversePolishExpression(rpnExpression)
関数が単体テストでカバーされなければならないという強い感情を持っています... Evaluate
メソッドのためにいくつかの単体テストが失敗する場合は、バグがどこにあるのかを指摘しません(ConvertToRPNExpression
メソッドEvaluateReversePolishExpression
ファンクション)。
質問があります - この場合、プライベート関数の単体テストを書くのは大丈夫ですか?
応答に感謝します。あなたが正しいと思われます... – Disappointed
@Disappointedでは、クラスが複雑になるかどうかを検証するために、「単一の責任原則」を使用することができます。通常、あなたのユニットテストの問題は良い指標です – Aphelion