Dies ist eine eher philosophische Frage, die sich mit der .NET-Plattform befasst, aber möglicherweise ist sie auch für andere Sprachen nützlich. Ich mache viele Unit-Tests und vor allem, wenn ich Komponenten von Drittanbietern verwende, mit denen ich oft zu kämpfen habe. In .NET besteht ein enormer Anspruch auf Komponentendesign (er), zu entscheiden, welche Methode virtuell sein soll oder nicht. Auf der einen Seite ist es die Verwendung von Komponenten (was sinnvoll ist, um virtuell zu sein), auf der anderen Seite die Verspottbarkeit von Komponenten . Sie können Shims verwenden , um Komponenten von Drittanbietern zu verspotten. Dies führt jedoch häufig zu schlechtem Design und Komplexität. Wie ich mich erinnern kann, ging es bei der Diskussion darüber, alle Methoden virtuell zu machen (JAVA hat es von Anfang an) in .NET um Leistung. Aber es ist immer noch das Problem? Warum sind nicht alle Methoden in .NET virtuell oder warum hat nicht jede Klasse mindestens eine Schnittstelle?