Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Globale Mocks mit TypeMoq und Mocha synchronisieren
Wax
myCSharp.de - Member

Avatar #avatar-2276.jpg


Dabei seit:
Beiträge: 730
Herkunft: Dortmund

Themenstarter:

Globale Mocks mit TypeMoq und Mocha synchronisieren

beantworten | zitieren | melden

Hallo zusammen,

hat vielleicht jemand Erfahrung mit globalen Mocks unter TypeMoq?
Ich möchte den Zugriff auf

window["MyGlobal"]
gerne mittels TypeMoq mocken.

Dazu verwende ich ein Interface von MyGlobal.

let globalMock = TypeMoq.GlobalMock.ofType2<IMyGlobal>('MyGlobal', window);

Das funktioniert soweit auch ganz gut, allerdings bekomme ich mit mocha race conditions, da sich mehrere Tests wohl parallel das globale Objekt "kaputt" schreiben.

Nun habe ich auf der Doku-Seite von TypeMoq etwas von GlobalMock + GlobalScope gesehen und getestet, bekomme dieses "Sandbox" verhalten allerdings nicht hin. Wenn ich z.B. am Ende des Tests verifiziere, wie oft eine bestimmte Methode des Mocks aufgerufen wurde, dann sehe ich, dass alle Aufrufe addiert wurden und nicht in eigenen Scopes stattfanden.

Falls hier jemand Erfahrung hat, wie man am besten damit umgeht, wenn Tests sich mit globalen Objekten in die Haare kriegen, dann möge er dies bitte mitteilen. ;-)

Gruß
wax
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

Erkläre mir doch mal wozu diese globalen Mocks benötigt werden.

Bei Unit-Tests gibt es eigentlich nichts Globales was man in die Tests mit hineinnimmt. Benötige ich den gleichen Mock in mehreren Tests, dann wird dieser Mock über eine Factory erstellt und jeder Test bekommt eine eigene Instanz.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Deaktiviertes Profil am .
private Nachricht | Beiträge des Benutzers
Wax
myCSharp.de - Member

Avatar #avatar-2276.jpg


Dabei seit:
Beiträge: 730
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Es ist nur so das ich nicht steuern kann wann welcher Test ausgeführt wird und die einzelnen SUTs verwenden Zugriffe auf window["MyGlobal"]. Ich möchte gerne erreichen das jeder Test seine eigene globale Umgebung erhält. Leider kriege ich das unter TypeMoq nicht hin. Deswegen die Frage
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.753

beantworten | zitieren | melden

Aber warum brauchst Du eine globale Variable oder einen globalen Mock, was hast Du denn vor?
Ich bin kein JavaScript/TypeScript Guru aber kümmere mich auch im unser Frontend-Team und ich hab bisher nich gesehen, dass irgendwas Global is - das wäre mir aufgefallen ;-)
Bei "Global" bimmelt es eigentlich direkt, dass man mal nachhaken sollte, warum das notwendig ist.
private Nachricht | Beiträge des Benutzers
Deaktiviertes Profil
myCSharp.de - Member



Dabei seit:
Beiträge: 985

beantworten | zitieren | melden

Dein Testszenario sieht also so aus, dass über eine IMyGlobal Instanz auf etwas zugegriffen wird.

Dann gib dem Test doch eine eigene IMyGlobal Instanz. Dann hast du keine race condition und du kannst auch ganz gezielt testen.
private Nachricht | Beiträge des Benutzers
Wax
myCSharp.de - Member

Avatar #avatar-2276.jpg


Dabei seit:
Beiträge: 730
Herkunft: Dortmund

Themenstarter:

beantworten | zitieren | melden

Genau so ist es dann auch geschehen. Danke für die Hinweise. Mich hätte halt interessiert wie das andere Vorgehen funktioniert. ;-)

Mit freundlichen Grüßen
wax
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Wax am .
private Nachricht | Beiträge des Benutzers