私はRhinoMockをいくつか試してきましたが、模倣されたメソッドを仮想化する必要があります。これは、現在私が仮想としてマークされていない模擬したいメソッドを含むカスタムフレームワークを持っていることを除いて、問題ありません。メソッドを仮想化する危険性は何ですか?
私はこれらのメソッドを仮想化することで何か問題を予測することはできませんが、私が見なければならないメソッドを仮想化する潜在的な危険性は何ですか?
私はRhinoMockをいくつか試してきましたが、模倣されたメソッドを仮想化する必要があります。これは、現在私が仮想としてマークされていない模擬したいメソッドを含むカスタムフレームワークを持っていることを除いて、問題ありません。メソッドを仮想化する危険性は何ですか?
私はこれらのメソッドを仮想化することで何か問題を予測することはできませんが、私が見なければならないメソッドを仮想化する潜在的な危険性は何ですか?
メソッドがオーバーライドされるように設計されており、誰かがそれを上書きしていない場合は実際には非常に問題となる可能性があります。特に、コンストラクタから仮想メソッドを呼び出さないでください。考えてみましょう:
class Base {
public Base() {
InitializeComponent();
}
protected virtual void InitializeComponent() {
...
}
}
class Derived : Base {
private Button button1;
public Derived() : base() {
button1 = new Button();
}
protected override void InitializeComponent() {
button1.Text = "I'm gonna throw a null reference exception"
}
}
派生クラスには、独自のコンストラクタの単一の行が実行された前に、仮想メソッド呼び出しが呼び出され、そのInitializeComponentメソッドにつながることを認識しないかもしれません。
Ayendeがあり、無効状態であってもよいです仮想メソッドがどのように動作するかの素敵な治療:
http://ayende.com/Blog/archive/2007/01/05/HowVirtualMethodsWork.aspx
私はRhinoを一度も使用していないので、なぜこれが必要なのか不思議です。誰でも気をつけて説明しますか? –
私はRhinoが同じタイプを使用してインターフェイスを模擬するためにメソッドをオーバーライドすると仮定していますが、モックの動作。 –