Frage

Wo sehen Sie Unit-Tests stellen für private Funktionen in C # -Klassen?

Ein Artikel in Wikipedia schlägt vor:

  • Putting-Tests in der gleichen Klasse wie die Mitglieder sie testen
  • Verwenden von Teilklassen

Persönlich scheinen keine dieser Methoden angemessen, und ich viel lieber Unit-Tests in einem separaten Projekt befindet sich haben, zusammen.

Alle Gedanken auf, das?

(Ich weiß, es gibt eine ganze Menge Debatte darüber, ob private Methoden sollten überhaupt getestet werden. Ich mag beiden Seiten des Arguments hören.)

War es hilfreich?

Lösung

Private Methoden müssen nicht unbedingt direkt getestet werden. Sie können ihre Gültigkeit bestimmen auf Tests der öffentlichen Methoden, die diese privaten Methoden zu nutzen.

Sie sollten jedoch darauf zu achten, dass Ihre öffentlichen Methoden können private Methoden leicht injizieren Mock Abhängigkeiten in erleichtern testen und simulieren alle zumutbaren Szenarien.

Edit: Wie bei dem Ihre anderen Tests sollten lokalisiert werden, schlage ich vor, ein eigenes Unterverzeichnis innerhalb Ihres Projekts Ihre Tests zu behandeln. Bei Tests für PHP-Anwendungen zu schreiben, habe ich einen Tests Verzeichnis in der Wurzel meiner Projektstruktur, dessen Verzeichnisses ist das meine reale Anwendungsverzeichnisstruktur identisch. Darin habe ich eine Testklasse für jede echte Klasse.

Just nicht kompilieren Ihre Testklassen mit dem Rest des Projekts, wenn die Produktion (oder im Falle einer interpretted Sprache wie PHP, Verteilen Sie die Testklassen auf die Produktion Webserver) freigegeben wird.

Andere Tipps

Do not Unit-Test-private Methoden. Unit-Tests sind für die Prüfung der sichtbar (so öffentlich und geschützt) Schnittstelle einer Klasse. Die privaten Methoden sind Implementierungsdetails und Schreiben von Unit-Tests für sie nicht notwendig ist (ihr Verhalten implizit durch die Tests auf die sichtbaren Methoden getestet werden sollte), führt zu spröde Tests (wie die Details der Implementierung könnte sich ändern) und ist ein Hindernis für Refactoring.

Wenn Sie eine private Methode haben, dass Sie das Gefühl hat, um Unit-Test benötigen, dass ein großer Hinweis ist, dass vielleicht sollte es auf einer anderen Klasse in ein öffentliches Verfahren ausgeklammert werden.

  

Wo sehen Sie Unit-Tests stellen für private Funktionen in C # -Klassen?

Nirgendwo. Sie existieren nicht.

In der Regel sind meine Unit-Tests in separaten Projekten.

Ich mag auch persönlich Unit-Tests in einem separaten Projekt haben. Wenn Sie eine private Methode, um Unit-Test möchten, können Sie die private Methode stattdessen intern machen. Anschließend können Sie interne Methoden sichtbar zu Ihrer Unit-Tests machen direkt aufrufen, indem Sie den folgenden Zusatz zu AssemblyInfo.cs:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Sie sollten das tun, was für Sie arbeitet; hier ist das, was für mich funktioniert:

Mein Gerät ist eine Klasse : Das ist, was ich bin versucht Test. Keine Methode. Ich versuche, die objektorientierte Programmierung zu tun, so dass ich auf Objekte meine Aufmerksamkeit setzen.

Wenn ich mich in Versuchung finden eine private Methode zu testen, muss ich refactor . Ich möchte nur direkt eine private Methode testen, da es zwischen ihm zu viel anderen Code und die Tests, und weil die private Methode selbst ist komplex genug, um Testung Aufmerksamkeit. Also, ich werde in der Regel Klasse extrahieren, dass private Methode zu ziehen, und andere damit zusammenhängende Elemente in eine neue Klasse.

neigen Meine Klassen ganz sein kleine . Sie sind leicht zu lesen und zu verstehen. Meine Methoden sind natürlich auch sehr klein und leicht zu verstehen.

Den Übergang auf diese Art und Weise von mir gewünschten Arbeits umdenken viele meiner Annahmen und Gewohnheiten über die Programmierung. Was einst schien jetzt radikal scheint alltäglich.

Ich bin damit einverstanden, dass private Methoden sollten in der Regel nicht geprüft werden, da Sie nur die öffentlichen Schnittstellen testen.

That being said, gibt es gute Gründe, warum Sie private Methoden testen möchten:

  1. Sie verwenden TDD, und Sie haben eine komplexe private Methode zu entwickeln. Erstellen von Testverfahren für die private Methode kann erforderlich sein, Ihre Schreib test- Code schreiben zu halten -. Prüfzyklus zur richtigen Körnung

  2. Sie können Teil eines Teams sein, wo andere müssen möglicherweise die private Methode ändern, und Sie mögen Tests, um sicherzustellen, dass die Änderungen nicht schaffen Probleme.

Einige Lösungen:

  1. einige Methoden erklären, die öffentlich sind, dass Delegierter der privaten Methode und werden nur zum Zweck zu testen. Diese könnten zum Beispiel das Präfix mit TestFoo1, TestFoo2 etc.

  2. Verwenden Sie die intern

http://msdn.microsoft.com/ en-us / library / 7c5ka91b (VS.80) aspx

Ihre Frage Titel und erster Satz ist unterschiedlich. :)

Ich bin mir nicht sicher, wo die Tests zu platzieren. Das würde davon abhängen, Sprache und C # ist nicht etwas, was ich kenne, aber ich kann mir vorstellen, dass ein wesentlicher Teil des Codes innerhalb private Methoden ist. Ich würde fühlen sich unwohl, wenn das nicht getestet wurde. Code Coverage würde ziemlich viel fallen.

Wir verwenden private Accessoren in Visual Studio private Methoden zu testen. Dies bedeutet, dass, dass die Testklassen in einem separaten Projekt leben können.

Allerdings versuchen wir zu begrenzen, um wirklich die Zahlen dieser, weil:

  • eine private Methode, die allein stehen kann, kann als eine öffentliche Methode in einer anderen Klasse
  • herausgezogen wird
  • private Methoden, die tun nichts besonders nützlich außerhalb der Klasse kann durch die öffentlichen Methoden dieser Klasse getestet werden

absolut ja. Private Methoden sollten auf jeden Fall geprüft werden. und MbUnit Unit-Test-Framework kann private Member zugreifen.

finden Sie in diesem Blog: testen private Methoden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top