次のバグが私のコードで非常に頻繁に発生していることに気づき、それを回避するための優れた戦略を誰かが知っているかどうか疑問に思いました。
次のようなクラスを想像してください。
public class Quote
{
public decimal InterestRate { get; set; }
}
ある時点で、次のように利率を利用する文字列を作成します。
public string PrintQuote(Quote quote)
{
return "The interest rate is " + quote.InterestRate;
}
後日、InterestRate プロパティを 10 進数から独自のクラスにリファクタリングしたと想像してください。
public class Quote
{
public InterestRate InterestRate { get; set; }
}
...しかし、InterestRate クラスのToStringメソッドをオーバーライドするのを忘れたとしましょう。InterestRate プロパティのすべての使用法を注意深く調べない限り、ある時点で文字列に変換されていることに気付かないでしょう。コンパイラは確かにこれを検出しません。私の救世主の唯一のチャンスは、統合テストによるものです。
次にPrintQuoteメソッドを呼び出すと、次のような文字列が返されます。
「利率は Business.Finance.InterestRate です」 .
ああ。どうすればこれを回避できますか?