Frage

Ich bin mit der Mediator Mustereinheit Testen von GUI-Objekten zu erleichtern.

psudo Code Beispiel:

Class MyGuiClass
{
  //...  Declare and initialize mediator to be a MyMediator
  private void On_SomeButtonPressed()
  {
     mediator.SomeButtonWasPressed();
  }
}

Class MyMeditator
{
  public void On_SomeButtonPressed()
  {
     //.. Do something now that the button was pressed
  }

}

Das ist schön, weil ich kann jetzt Testeinheit, was passiert, wenn SomeButton, ohne erstellen Sie ein Fenster gedrückt wird.

Meine Sorge ist, dass ich eine Methode genommen haben, die privat war und machte es für jeden einzelnen Bürger, die ein Mediator macht zu nennen. Vergangenheit Ich habe dies getan, um es mich nicht gestört, weil ich nicht viele Methoden habe, die ich öffentlich machen musste.

Ich bin Refactoring zur Zeit eine sehr große Klasse dieses Muster zu verwenden, und ich frage mich, ob es irgendwie ist, kann ich die Sichtbarkeit steuern, wer eine MyMediator oder Klassen, die machen können einige der Methoden öffentlich sind. (Dies kann nicht möglich sein, oder sogar notwendig, aber ich dachte, ich würde fragen.)

(Ich bin mit C # 3.0 mit .NET 3.5 SP1)

War es hilfreich?

Lösung

Der Punkt ist, dass Sie die öffentliche Schnittstelle einer Klasse mögen, dass die Klasse der Öffentlichkeit ‚API‘ zeigen, so bei der Herstellung von privaten Methoden öffentlichen Sie machen die Klasse eher verwirrend und weniger ‚sauber‘?

Ein paar Dinge, die Sie tun können: 1) durchdenken, was tatsächlich ist das ‚öffentliche Gesicht‘ des Vermittlers (oder bescheidenen Objekt) Klasse und glücklich diese Methoden öffentlich machen. Auch wenn sie nur in der Baugruppe verwendet werden - nicht Teil der öffentlichen Gesichts der Montage - das ist okay, weil feststellen, dass Ihr Mediator Klasse selbst nicht öffentlich erklärt. So auch seine öffentlichen Methoden sind immer noch im Inneren der Montage.

2) Sie können die Gemeinen frisieren durch interne Verwendung für private (und dann die InternalsVisibleTo Versammlung gesetzt Attribut, wenn Ihre Testklassen in einer separaten Assembly sind).

3) Nehmen Sie die ‚Black Box‘ -Ansatz zur Unit-Tests, wobei im Prinzip nie die Gemeinen testen müssen, weil sie über ihre Verwendung getestet werden, wenn aus den öffentlichen Methoden genannt.

Andere Tipps

Ich denke, es spielt keine Rolle, .. Wer eine Instanz des Vermittlers hat, anders als die gui? Wenn jemand tut, wird es um die Methode zu nennen? Ist dies der Fall, ist es wichtig? Wird es schwer sein, den Fehler zu bemerken, zu diagnostizieren und beheben?

Ich denke, können Sie erreichen, was Sie mit Ereignissen suchen aber:

z.

/* in the gui class (view) */
public event EventHandler OnButtonClicked;

/* in the mediator */
public MyMediator(MyView view) 
{
    view.OnButtonClicked += HandleButtonClicked;
}

private void HandleButtonClicked(object sender, EventArgs e)
{

}

über c # nicht sicher, aber in Java kann man etwas als Paket-Level-Zugriff (in Java durch Weglassen des Zugriffsbezeichner) erklären. Was ich tue, ist eine separate Testhierarchie erstellen, die meine Paketstruktur Parallelen, so zu Testklasse com.a.b.c.MyClass, werde ich eine Testklasse com.a.b.c.MyClassTest haben, die dann zugreifen können rechtlich die Paket-Zugriffsmethoden in MyClass.

ich nicht so viel wie die Idee, nicht nur wegen der Schwierigkeiten beim Zugang alles öffentlich zu machen, sondern weil es clutters die Schnittstelle - ich würde eher die öffentliche Schnittstelle der Klasse Express was es tut, nicht wie es tut, was oft, wo ich am Ende, wenn ich Methoden aussetzen ich privat sein würde es vorziehen.

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