Ich habe die ClientWebSocket-Klasse für die WebSocket-Kommunikation verwendet. Wie verspottet man die Klasse am besten?
Lösung des Problems
Nehmen wir an, Sie haben den folgenden Code
class MyDependentClass {
private AnyDependency _dependency;
MyDependantClass(AnyDependency dependency){
_dependency = dependency;
}
void DoSomethingWithDependency() {
_dependency.MethodCall();
}
}
In Ihrem Komponententest können Sie entweder eine Instanz von AnyDependency mit simulierten Parametern erstellen. Oder, und das würde ich vorschlagen, Sie kapseln Ihre Abhängigkeit und invertieren sie.
interface IAnyDependencyWrapper {
void MethodCall();
}
Erstellen Sie dann eine Klasse, die Ihre Schnittstelle implementiert und AnyDependency verwendet
class AnyDependencyWrapper: IAnyDependencyWrapper {
private AnyDependency _dep;
AnyDependencyWrapper(AnyDependency dep){
_dep = dep;
}
void MethodCall(){
_dep.MethodCall();
}
}
und injiziere es dann in deine Klasse:
class MyDependentClass {
private AnyDependency _dependencyWrapper;
MyDependantClass(IAnyDependencyWrapper dependencyWrapper){
_dependencyWrapper = dependencyWrapper;
}
void DoSomethingWithDependency() {
_dependencyWrapper.MethodCall();
}
}
Jetzt wird die Abhängigkeit von Ihrem Code entkoppelt und Sie können IAnyDependencyWrapper verspotten. Mit dieser Lösung können Sie auch jederzeit die Implementierung von IAnyDependencyWrapper ändern, zB wenn Sie die Abhängigkeit ändern oder mit Breaking Changes aktualisieren müssen
Keine Kommentare:
Kommentar veröffentlichen