2016-04-12 5 views
1

Ich verstehe, dass ideale Komponententests keinen Kontext zwischen ihnen teilen sollten, aber ich habe ein Dilemma: Ich versuche Einheitstest gegen ein Stück Software, die nur eine einzige Lizenz hat instanziiert auf einmal.Geteilter Kontext zwischen .NET-Unit-Test-Klassen

.NET Unit-Tests scheinen parallel zu laufen. Wenn ich auf "Alle Tests ausführen" klicke, werden die Klassen alle gleichzeitig ausgeführt und die meisten Fehler, weil sie nicht alle eine Lizenz haben können.

So sehe ich zwei Fragen, die sich gegenseitig ausschließen:

  • Wie teile ich den Zusammenhang zwischen C# Unit-Test-Klassen?
  • ODER Wie erzwinge ich .NET Komponententests zu NICHT parallel laufen?

Klarstellung:Die lizenzierte Software ist nicht das, was ich versuche, es zu testen, nur das Werkzeug, das ich brauche, den Test DO

+1

Sie meinen zwingen sie * nicht * parallel zu laufen? –

+1

Können Sie Ihren Lizenzierungsanbieter verspotten oder injizieren, damit er Ihre Komponententests nicht beeinträchtigt? –

+4

Es klingt wie, Sie haben eine Integrationstests anstelle von UTs erstellt. Warum benutzt du kein spöttisches Framework für eine Isolation? –

Antwort

1

Normalerweise würde ich Singleton ein Anti-Muster betrachten, da Es macht Unit-Tests unmöglich. Aber das ist ein guter Anwendungsfall, um eine Singleton zu haben. Ein echtes Singleton mit einem privaten Konstruktor und einem statischen Konstruktor wird nur einmal ausgeführt und ist Thread-sicher.

Auf diese Weise können Sie Ihre Tests parallel laufen lassen.

+0

Ja. Vielen Dank. Ich habe gezögert, aber ich denke, das ist auch der richtige Weg. – Raychaser

0

Ich bin mir nicht sicher, ob dies das ist, wonach Sie gesucht haben, aber würde das funktionieren, wenn Sie alle Tests zur gleichen Zeit ausführen, aber jeder von ihnen auf einer separaten AppDomain ausgeführt wird?

Als Referenz habe ich die Cross-Domain-Delegierten, wo Sie Ihre tatsächliche Prüfung bestehen: https://msdn.microsoft.com/en-us/library/system.appdomain.docallback(v=vs.110).aspx

Lassen Sie mich wissen, ob das funktioniert ist!